C에서 프로그램을 만드는 동안 문제가 발생했습니다. & &은 첫 번째가 거짓 인 경우 두 번째 피연산자를 평가하지 않습니다. 나는 이것이 단락 회로 동작으로 알려져 있음을 알고 있습니다. 하지만 두 번째 피연산자를 실행하려면 아래 코드에서 이유를 확인하십시오.C에서 평가 && 연산자
while(a-- && b--){
//some statements
}
제 작업을 수행하는 방법을 알려주세요. 고마워요!
C에서 프로그램을 만드는 동안 문제가 발생했습니다. & &은 첫 번째가 거짓 인 경우 두 번째 피연산자를 평가하지 않습니다. 나는 이것이 단락 회로 동작으로 알려져 있음을 알고 있습니다. 하지만 두 번째 피연산자를 실행하려면 아래 코드에서 이유를 확인하십시오.C에서 평가 && 연산자
while(a-- && b--){
//some statements
}
제 작업을 수행하는 방법을 알려주세요. 고마워요!
a와 b가 작은 경우 * B가 오버 플로우하지 않는만큼 같은 :
while((a--) * (b--))
{...}
가 클 수있는 경우를 : 당신이 후 b
를 감소가 필요하면
while(((a--) ? 0xf : 0) & ((b--) ? 0xf : 0))
{...}
두 번째 코드를 가져올 수 없습니까? – user3556306
두 번째 버전은 모든 양수를 0xf로 변환 한 다음 bitwise &를 수행합니다. 따라서 (a--와 b--) 모두 양수이면 0xf & 0xf가 0xf가되어 루프가 계속됩니다. 둘 중 하나가 0이면 0xf & 0을 얻습니다.이 값은 0이며 루프가 중지됩니다. 단락이 없으므로 (a--)와 (b--)가 모두 평가됩니다. – Ian
while(a && b){
a--; b--;
//some statements
}
// just after loop ends
a--; b--;
루프, 왜 평가를 먼저 보장하지 않습니까? a
및 b
가 귀하의 질문에 나타냅니다보다 더 복잡한 경우
while (b-- && a--)
은 물론,이 작동하지 않을 수 있습니다.
당신이 후위 감소를 사용하고 있기 때문에, 모든 것은 (. 당신이 정말 당신이 결정하는 마지막 줄 것을 필요 여부) 단순히
while (a && b)
{
--a; --b;
//some statements
}
--a; --b;
로
를 다시 작성하지만 당신이 정말로 원하는 경우에 할 수있다 모든 것을 계속 채우려면 while
조건을 충족시키는 다른 방법이 있습니다. 예를 들어, 당신은 당신이 당신이 a
이 true
또는 false
는 다음 쉼표를 사용할 수 있는지 여부를 두 번째 피연산자의 실행을 원하는 경우 !!
while(!!(a--) & !!(b--)){
//some statements
}
와 피연산자를 "정상화"를 기억하는 &
연산자 &&
연산자를 대체 할 수 있습니다 운영자. 나는 당신이 이것을 필요로한다고 생각합니다 :
while((b--, a--) && b) {...}
어떤 결과가 나타 났습니까? – Pradheep
사실 첫 번째 피연산자가 거짓이면 b의 값을 감소시켜야합니다. 그러나 그것은 감소하지 않습니다. 루프 후에 b의 감소 값을 사용해야합니다. – user3556306