繁体   English   中英

C++ 程序的意外输出

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM