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

Weird output of simple expression in C, why?

本文关键字:输出 为什么 简单 表达式      更新时间:2023-10-16

我使用TurboC++。我写下面的表达式,这不是导致正确的评估,我错过了背后的一些概念?

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

输出为

81年

为什么?

300*300 is 90000.

假设int为16位,则溢出

溢出环绕,给出:24464

24465/300 = 81.55

不要依赖这个。

300 * 300/300从左到右求值

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

300 * 300的结果是24464。(24464 + 32768 + 32768 = 90000).

24464/300 = 81