>백엔드 개발 >C++ >모듈로 연산자가 때때로 부정적인 결과를 생성하는 이유는 무엇입니까?

모듈로 연산자가 때때로 부정적인 결과를 생성하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-15 20:57:14850검색

Why Does the Modulo Operator Sometimes Produce Negative Results?

모듈로 연산이 음수 결과를 생성하는 이유

모듈로 연산자(%)는 첫 번째 피연산자(a)를 두 번째 피연산자(b)로 나눈 후 나머지를 계산합니다. 그러나 특정 모듈로 연산에서 음수 값이 발생할 수 있는 이유를 이해하려면 연산자 동작의 세부 사항을 조사해야 합니다.

ISO14882:2011(e) 5.6-4 표준에서는 다음과 같이 명시합니다. "적분 피연산자의 경우 / 연산자는 다음을 생성합니다. 분수 부분을 버린 대수적 몫". 이는 몫(a/b)이 소수 부분이 없는 정수임을 의미합니다. 게다가 "결과의 형태로 몫 a/b가 표현 가능하다면 (a/b)*b a%b는 a와 같다"는 것이다.

연산(-7%3)을 생각해보자. 몫(-7 / 3)은 소수 부분을 모두 버리기 때문에 -2입니다(-7.0 / 3.0은 -2.33을 산출하지만 정수 부분만 유지합니다). 몫에 제수(-2 * 3 = -6)를 곱하고 그 결과를 나머지(a%b)에 더하면 원래 값과 일치하는 (-6) (-1) = -7이 됩니다.

이제 (7%-3)를 살펴보겠습니다. 몫(7 / -3)도 -2이지만 나머지 a%b의 부호는 ISO14882:2011(e)에 따라 구현 정의됩니다. 이 경우 일부 구현에서는 음수 부호를 선택하여 1이 됩니다.

따라서 음수 피연산자를 사용한 모듈로 연산의 동작은 구현에 따라 다르며 양수 또는 음수 나머지가 생성될 수 있습니다. 그러나 표준은 특정 조건에서 항상 몫과 나머지로부터 원래 값을 재구성할 수 있음을 보장합니다.

위 내용은 모듈로 연산자가 때때로 부정적인 결과를 생성하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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