C/C /Obj-C에서 음수를 처리하는 모듈러스 연산자
수학과 달리 C-의 모듈러스 연산자(%) 파생 언어는 음수에 적용될 때 일관되지 않은 동작을 나타냅니다. 이러한 불일치는 나머지 부호를 둘러싼 모호성에서 발생합니다.
구현 정의 동작
C 03 표준에 따르면 두 피연산자가 모두 있을 때 나머지 부호는 음수는 구현에 따라 정의됩니다. 이는 서로 다른 컴파일러와 플랫폼이 (-1) % 8 및 fmodf(-1, 8)와 같은 연산에 대해 다양한 결과를 생성할 수 있음을 의미합니다.
신뢰할 수 있는 표현식
구현에 관계없이 다음 표현식은 true입니다.
(a / b) * b + (a % b) == a
이 표현식은 피제수(a)가 다음과 같을 수 있음을 나타냅니다. 몫(a / b)과 나머지(a % b)로 재구성됩니다.
해법
음수 피연산자의 일관된 동작을 보장하는 한 가지 접근 방식은 다음을 계산하는 것입니다. 나머지는 다음과 같습니다.
<code class="cpp">int mod(int a, int b) { if (b < 0) return -mod(-a, -b); int ret = a % b; if (ret < 0) ret += b; return ret; }</code>
이 함수는 b가 다음인 경우 두 피연산자를 모두 부정하여 음수 피연산자를 처리합니다. 부정적인. 나머지는 %b로 계산됩니다. 나머지가 음수이면 b의 절대값을 더하여 조정됩니다. 이렇게 하면 결과가 위에서 언급한 신뢰할 수 있는 표현식을 만족하는 음수가 아닌 나머지가 됩니다.
이러한 방식으로 mod(-1, 8)는 7을 반환하고 mod(13, -8)은 -를 반환합니다. 3, 예상되는 수학적 동작을 준수합니다.
위 내용은 모듈러스 연산자는 C/C /Obj-C에서 음수를 어떻게 처리합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!