C中简单表达式的奇怪输出,为什么?
Weird output of simple expression in C, why?
我正在使用 TurboC++。我写了以下表达式,它没有得到正确的评估,我是否遗漏了它背后的一些概念?
int c=300*300/300;
printf("%d",c);
输出是
81
为什么?
300 * 300 / 300 的计算从左到右发生。
300 * 300 溢出 16 位有符号整数类型(Turbo C++ 中的 int
是 16 位)。由于计算将在有符号算术中进行,结果未定义。
发生的事情是 300 * 300 循环得到 24464。(24464 + 32768 + 32768 = 90000)。
24464 / 300整数除法是81
300*300 is 90000.
假设int是16bit,你已经溢出了。
溢出环绕,给你:24464
。
24465/300 = 81.55
不要依赖这个。这是未定义的行为。
我正在使用 TurboC++。我写了以下表达式,它没有得到正确的评估,我是否遗漏了它背后的一些概念?
int c=300*300/300;
printf("%d",c);
输出是
81
为什么?
300 * 300 / 300 的计算从左到右发生。
300 * 300 溢出 16 位有符号整数类型(Turbo C++ 中的 int
是 16 位)。由于计算将在有符号算术中进行,结果未定义。
发生的事情是 300 * 300 循环得到 24464。(24464 + 32768 + 32768 = 90000)。
24464 / 300整数除法是81
300*300 is 90000.
假设int是16bit,你已经溢出了。
溢出环绕,给你:24464
。
24465/300 = 81.55
不要依赖这个。这是未定义的行为。