C/C /Obj-C에서 음수를 처리하는 모듈로 연산자
C, C 및 Obj-C에서 모듈로 연산자 (%)는 나누기 연산의 나머지를 반환합니다. 그러나 음수가 포함되면 예상치 못한 결과가 발생할 수 있습니다. 특히 (-1) % 8은 7 대신 -1로 평가됩니다. 이 동작은 모듈로 연산자의 일관된 해석을 기대하는 프로그래머에게 실망스러울 수 있습니다.
문제 이해
모듈로 연산자는 다음과 같이 정의됩니다: x % y = x - (x / y) * y. 두 피연산자가 모두 음수가 아니면 나머지도 음수가 아닙니다. 그러나 피연산자 중 하나 또는 둘 다 음수인 경우 동작은 구현에 따라 정의됩니다. 이는 서로 다른 컴파일러와 런타임 환경이 서로 다른 결과를 생성할 수 있음을 의미합니다.
음수 처리 솔루션
음수를 처리할 때 일관된 동작을 보장하려면 다음을 사용할 수 있습니다. 함수:
<code class="c++">int mod(int a, int b) { if (b < 0) { // Check if the divisor is negative return -mod(-a, -b); // Recursively call mod with both operands negated } int ret = a % b; if (ret < 0) { ret += b; // Adjust the remainder if it's negative } return ret; }</code>
이 함수는 음수 피제수와 제수를 올바르게 처리합니다. 예를 들어, mod(-1, 8)은 7을 반환하고 mod(13, -8)은 -3을 반환합니다.
추가 고려 사항
mod() 함수는 음수를 올바르게 처리하지만 모든 컴파일러나 런타임 환경에서 지원되지 않을 수도 있다는 점은 주목할 가치가 있습니다. 이식성이 문제가 되는 경우 음수 피연산자를 명시적으로 확인하고 이에 따라 계산을 조정해야 할 수도 있습니다.
mod() 함수를 사용하거나 음수 피연산자를 수동으로 처리하면 모듈로 연산자가 피연산자 값에 관계없이 C, C 또는 Obj-C 코드입니다.
위 내용은 모듈로 연산자는 C/C /Obj-C에서 음수를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!