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

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

Patricia Arquette
Patricia Arquette원래의
2024-11-08 03:56:01355검색

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

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.