제 친구는 "mod"와 "remainder"사이에 차이점이 있다고 말했습니다.
그렇다면 C와 C ++의 차이점은 무엇입니까? '%'는 C에서 "mod"또는 "rem"을 의미합니까?
제 친구는 "mod"와 "remainder"사이에 차이점이 있다고 말했습니다.
그렇다면 C와 C ++의 차이점은 무엇입니까? '%'는 C에서 "mod"또는 "rem"을 의미합니까?
답변:
모듈러스와 나머지는 차이가 있습니다. 예를 들면 다음과 같습니다.
-21
모드가 4
있습니다 3
때문 -21 + 4 x 6
입니다 3
.
그러나 -21
로 나누어 4
제공 -5
의 나머지 -1
.
양수 값의 경우 차이가 없습니다.
%
항상 나머지 이었지만, 수 또한 , C89에 분할 정수 그래서 C89에서 0 대신 대한의 부의 무한대에 가까워 라운드에 허용 되었기 때문에, 계수 (즉, 항상 긍정적 인) 수 -5 / 2
수 -2
나머지 -1
, 또는 -3
나머지 1
, 구현은 문서에있는로했다. C99는 유연성을 제거 했으므로 이제는 -5 / 2
항상 그렇습니다 -2
.
-21
모드가 4
있다 3
? 계산은 왜 -21 + 4 x 6
됩니까?
-21 + 4 x 6
과 0 사이에 있기 때문에 6 입니다.
'%'는 C에서 "mod"또는 "rem"을 의미합니까?
C %
에서 나머지는 1 입니다.
...,
/
연산자 의 결과는 분수 부분을 버린 대수 몫입니다 ... (종종 "제로쪽으로 절단")
%
연산자 의 피연산자 는 정수 유형이어야합니다. C11dr §6.5.5 2
/
연산자 의 결과는 첫 번째 피연산자를 두 번째 피연산자로 나눈 몫입니다.%
운영자 의 결과는 나머지입니다 ... C11dr §6.5.5 5
“mod”와“remainder”의 차이점은 무엇입니까?
C는 유클리드 디비전 또는 다른 모듈로 에서 사용되는 정수 모듈러스 함수와 같은 "mod"를 정의하지 않습니다 . "유클리드 모드" 는 음 의 a%b
경우 C의 작동 과 다릅니다 a
.
// a % b
7 % 3 --> 1
7 % -3 --> 1
-7 % 3 --> -1
-7 % -3 --> -1
유클리드 사업부로서의 모듈로
7 modulo 3 --> 1
7 modulo -3 --> 1
-7 modulo 3 --> 2
-7 modulo -3 --> 2
후보 모듈로 코드 :
int modulo_Euclidean(int a, int b) {
int m = a % b;
if (m < 0) {
// m += (b < 0) ? -b : b; // avoid this form: it is UB when b == INT_MIN
m = (b < 0) ? m - b : m + b;
}
return m;
}
부동 소수점에 대한 참고 사항 : double fmod(double x, double y)
"fmod"라고하더라도 유클리드 디비전 "mod"와 동일하지 않지만 C 정수 나머지와 유사합니다.
이
fmod
함수는의 부동 소수점 나머지를 계산합니다x/y
. C11dr §7.12.10.1 2
fmod( 7, 3) --> 1.0
fmod( 7, -3) --> 1.0
fmod(-7, 3) --> -1.0
fmod(-7, -3) --> -1.0
명확성 : C double modf(double value, double *iptr)
에는 인수 이름 을 정수와 분수 부분으로 나누는 비슷한 명명 된 함수 가 있습니다. 각 함수는 인수와 동일한 유형과 부호를 갖습니다. 이것은 이름 유사성을 제외하고 여기서 "mod"토론과는 거의 관련이 없습니다.
1 C99 이전에 C의 정의 %
는 여전히 나눗셈 의 나머지 부분 이었지만 /
"0으로 자르기"보다는 음의 몫을 내림 할 수있었습니다. C89에서 정수 나누기에 다른 값을 얻는 이유는 무엇입니까?를 참조하십시오 . . 따라서 일부 C99 이전 컴파일에서는 %
코드가 유클리드 부서 "mod"처럼 작동 할 수 있습니다. 위의 내용 modulo_Euclidean()
은이 오래된 학교 잔재에도 적용됩니다.
C 및 C ++ 및 많은 언어 %
에서 나머지는 계수 연산자가 아닙니다.
예를 들어 연산 -21 / 4
에서 정수 부분은 -5
이고 소수 부분은 -.25
입니다. 나머지는 제수의 일부인 분수이므로 나머지는 -1
입니다. JavaScript는 나머지 연산자를 사용하여이를 확인합니다.
console.log(-21 % 4 == -1);
모듈러스 연산자는 "시계"가있는 것과 같습니다. 12시, 3시, 6시 및 9시 위치에 각각 0, 1, 2 및 3의 값을 가진 원을 상상해보십시오. 시계 방향으로 몫의 몫을 시계 방향으로 돌리면 계수 연산의 결과 또는 반 시계 방향으로 음의 몫으로 3을 산출합니다.
참고 : 계수는 항상 제수와 같은 부호이며 나머지는 몫과 같은 부호입니다. 나머지 하나 이상이 음수 일 때 제수와 나머지를 더하면 계수가 산출됩니다.
수학에서 모듈로 연산의 결과는 유클리드 디비전의 나머지입니다. 그러나 다른 규칙도 가능합니다. 컴퓨터와 계산기에는 숫자를 저장하고 나타내는 다양한 방법이 있습니다. 따라서 모듈로 연산의 정의는 프로그래밍 언어 및 / 또는 기본 하드웨어에 따라 다릅니다.
7 modulo 3 --> 1
7 modulo -3 --> -2
-7 modulo 3 --> 2
-7 modulo -3 --> -1
0 ≤ r < |b|
일명 나머지 의미 "모듈로 연산을." -2와 -1의 결과는 무엇입니까?
a%b
그리고 a modulo b
때 동일한 의미를 가지고 a,b
긍정적이다. C99는 %
음수 값으로 정확하게 정의 합니다. C이 '나머지'. "호출 모듈로는"음의 값에 관한 세계의 다양한 정의가 C 사양 만 사용합니다. "양수의 맥락에서"모듈을.