[英]Unexpected output of C++ programm
我在turbo C编译器中编译了以下代码
void main()
{
int i =400*400/400;
if(i==400)
cout<<"Filibusters";
else
cout<<"Sea ghirkins";
}
我预计'i'的值为400 ,因此,输出应该是Filibusters 。 但是,我得到的输出是Sea Ghirkins 。 这怎么可能?
您正在溢出您的int
类型:这样做的行为是undefined 。
int
的范围可以小到 -32767 到 +32767。 检查sizeof int
的值。 如果是2,那么就不能表示400*400了。你也可以查看INT_MAX和INT_MIN的值。
请改用long
,它必须至少为 32 位。 也许这个周末给自己一个新的编译器?
查看运算符关联性: *
和/
是左关联的,这意味着您的公式按以下顺序计算: (400*400)/400
400*400=160000
。 计算机算术是有限的。 您正在使用 16 位编译器,其中int
适合 16 位,并且只能保存-32768 ... 32767
范围内的值( 为什么是 -32768 ?)。 160000 显然不适合该范围并被修剪(发生整数溢出)。 然后你将修剪后的值除以 400,得到一些意想不到的结果。 过去的编译器非常简单,所以我希望像 72 这样的东西被存储到i
。
以上意味着您可以使用更大的整数类型 - long
能够存储160000
或使用括号手动更改关联性: 400*(400/400)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.