> 백엔드 개발 > C++ > 모듈로 연산자는 C/C /Obj-C에서 음수를 어떻게 처리합니까?

모듈로 연산자는 C/C /Obj-C에서 음수를 어떻게 처리합니까?

Susan Sarandon
풀어 주다: 2024-11-03 04:11:02
원래의
977명이 탐색했습니다.

How Does the Modulo Operator Handle Negative Numbers in C/C  /Obj-C?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿