예를 들어
int result;
result = 125/100;
또는
result = 43/100;
결과는 항상 부서의 바닥입니까? 정의 된 동작은 무엇입니까?
답변
결과는 항상 부서의 바닥입니까? 정의 된 동작은 무엇입니까?
예, 두 피연산자의 정수 몫입니다.
6.5.5 곱하기 연산자
6 정수를 나누면 / 연산자의 결과는 분수 부분을 버린 대수 몫입니다. 88) 몫 a / b가 표현 가능하면, 식 (a / b) * b + a % b는 a와 같아야한다.
그리고 해당 주석 :
88) 이것을“0으로 자르기 ”라고합니다.
물론 주목해야 할 두 가지 사항은 다음과 같습니다.
3 일반적인 산술 변환은 피연산자에서 수행됩니다.
과:
5 / 연산자의 결과는 첫 번째 피연산자를 두 번째 피연산자로 나눈 몫입니다. % 연산자의 결과는 나머지입니다. 두 연산에서 두 번째 피연산자의 값이 0이면 동작이 정의되지 않습니다.
[참고 : 강조 광산]
답변
Dirkgently는 C99의 정수 나눗셈에 대한 훌륭한 설명 을 제공 하지만 C89에서는 음의 피연산자가있는 정수 나눗셈에 구현 정의 방향이 있음을 알아야합니다.
ANSI C 초안 (3.3.5)에서 :
피연산자가 음수 인 경우, / 연산자의 결과가 대수 지수보다 작은 최대 정수인지 또는 대수 지수보다 큰 최소 정수인지 여부는 % 연산자 결과의 부호와 같이 구현 정의됩니다. 몫 a / b가 표현 가능한 경우, 표현 (a / b) * b + a % b는 a와 같아야합니다.
따라서 C89 컴파일러가 붙어있을 때 음수로 조심하십시오.
FOR99가 그렇게했기 때문에 C99가 0으로 잘림을 선택했다는 것은 재미있는 사실입니다. comp.std.c 에서이 메시지 를 참조하십시오.
답변
결과가 음수이면 C가 바닥이 아닌 0으로 잘립니다. 파이썬 정수 나누기가 왜 항상 여기에 있는지에 대한이 독서를 배웠습니다. 왜 파이썬의 정수 나누기 마루
답변
예, 결과는 항상 0으로 잘립니다. 가장 작은 절대 값으로 반올림합니다.
-5 / 2 = -2
5 / 2 = 2
부호없는 및 음이 아닌 부호있는 값의 경우 이는 바닥과 같습니다 (-Infinity로 반올림).
답변
결과는 항상 부서의 바닥입니까?
아니요. 결과는 다양하지만 변동은 음수 값에 대해서만 발생합니다.
정의 된 동작은 무엇입니까?
정수 나누기가 0으로 반올림되는 동안 바닥이 음의 무한대로 명확하게 반올림되도록합니다 (잘라 내기)
양수 값은 동일합니다.
int integerDivisionResultPositive= 125/100;//= 1
double flooringResultPositive= floor(125.0/100.0);//=1.0
음수의 경우이 값이 다릅니다
int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
답변
나는 사람들이 귀하의 질문에 대답했지만 평신도 용어로 알고 있습니다.
5 / 2 = 2
// 5와 2는 모두 정수이므로 정수 나누기는 항상 소수를 자릅니다.
5.0 / 2 or 5 / 2.0 or 5.0 /2.0 = 2.5
// 여기서 5 또는 2 또는 둘 다에 소수점이 있으므로 몫은 10 진수입니다.