我正在使用TurboC++.我写下面的表达式并没有得到正确的评价,我错过了它背后的一些概念吗?
int c=300*300/300;
printf("%d",c);
Run Code Online (Sandbox Code Playgroud)
输出是
81
为什么?
Jos*_*ron 27
300*300 is 90000.
Run Code Online (Sandbox Code Playgroud)
假设int是16位,那么你已经溢出了.
溢出环绕,给你:24464.
24465/300 = 81.55
Run Code Online (Sandbox Code Playgroud)
不要依赖于此.这是未定义的行为.
300*300/300的评估从左到右进行.
300*300溢出16位有符号整数类型(intTurbo C++中为16位).由于计算将在带符号的算术中进行,因此结果是未定义的.
发生的事情是300*300正在回合给你24464.(24464 + 32768 + 32768 = 90000).
24464/300是整数除法的81.