나는 다음과 같은 코드를 입력 (더 컴파일 문제 또는 아무것도 없었다) :플로트를 사용하는 경우에도 5/2가 '2'로 나타나는 이유는 무엇입니까?
float y = 5/2;
printf("%f\n", y);
출력은 간단했다 : 2.00000
내 수학이는 잘못되지 않습니다? 또는/연산자에 잘못 되었습니까? 그것은 분열을 의미하지 않습니까? 그리고 5/2는 2.5와 같아야합니까?
도움을 주시면 대단히 감사하겠습니다.
나는 다음과 같은 코드를 입력 (더 컴파일 문제 또는 아무것도 없었다) :플로트를 사용하는 경우에도 5/2가 '2'로 나타나는 이유는 무엇입니까?
float y = 5/2;
printf("%f\n", y);
출력은 간단했다 : 2.00000
내 수학이는 잘못되지 않습니다? 또는/연산자에 잘못 되었습니까? 그것은 분열을 의미하지 않습니까? 그리고 5/2는 2.5와 같아야합니까?
도움을 주시면 대단히 감사하겠습니다.
5
은 int
이고 2
은 int
입니다. 따라서 5/2
은 정수 나누기를 사용합니다. 5
을 5.0f
(또는 2
과 2.0f
)으로 바꾸고 int
중 하나를 float
으로 바꾸면 부동 소수점 나누기가 발생하고 2.5
을 얻게됩니다. 분자 또는 분모를 명시 적으로 캐스팅하여 동일한 효과를 얻을 수도 있습니다 (예 : ((float) 5)/2
).
float를 사용하는 경우에도 5/2가 '2'로 나타나는 이유는 무엇입니까?
당신이 하지 "사용 float
"때문에. 5/2
은 정수 나누기입니다. 그 결과 (2
) 만 암시 적으로 float
으로 변환되어 2.
(점이 마음에 듭니다)이됩니다.
적절한 유형 캐스팅을 수행해야합니다.
float y = (float) 5/2
프로그램에서는 숫자를 int
으로 처리합니다.
int
두 개를 나누어 이것을 float
에 작성 중입니다. 따라서, 대답은 * 결과 *`float` 때문에 당신은
캐스팅으로 입력해야 2.0
입니다. 그러나 피연산자와 연산 자체는 정수입니다. –
[관련 질문은 여기] (https://stackoverflow.com/questions/27674295/why-do-we-separately-cast-to-float-in-an-integer-division). – WhozCraig