在C中简单表达的奇怪输出,为什么?

时间:2015-07-28 13:09:20

标签: c++ c turbo-c++

我正在使用TurboC ++。我写下面的表达式并没有得到正确的评价,我错过了它背后的一些概念吗?

int c=300*300/300;
printf("%d",c);

输出

  

81

为什么?

2 个答案:

答案 0 :(得分:27)

300*300 is 90000.

假设int是16位,那么你已经溢出。

溢出环绕,给你:24464

24465/300 = 81.55

不要依赖于此。这是未定义的行为。

答案 1 :(得分:9)

300 * 300/300的评估从左到右进行。

300 * 300溢出16位有符号整数类型(Turbo C ++中的int为16位)。由于计算将在带符号的算术中进行,结果未定义

发生的事情是300 * 300正在回合给你24464.(24464 + 32768 + 32768 = 90000)。

24464/300在整数除法中是81。