主题:c语言的一个小问题
透明世界
[专家分:0] 发布于 2011-06-10 16:38:00
main()
{
short int i;
i=32767;
i=i+1;
printf("%d\n",i);
}
请问哪位大侠能帮在下分析下为何最后结果是-32768?
回复列表 (共4个回复)
沙发
xt654005440 [专家分:20] 发布于 2011-06-10 20:36:00
我把你的代码运行了下改成下面的输出的就是32768
#include<iostream>
int main()
{
int i;
i=32767;
i=i+1;
printf("%d\n",i);
return i;
}
板凳
cracker007 [专家分:22140] 发布于 2011-06-12 04:09:00
因为溢出了。short的范围-32768~32767。当你超过最大范围就会回绕到最小,同理超过最小的就会回绕到最大。原因是二进制的补码运算就是这样的规律。
3 楼
latefly [专家分:20] 发布于 2011-06-16 21:24:00
[quote]因为溢出了。short的范围-32768~32767。当你超过最大范围就会回绕到最小,同理超过最小的就会回绕到最大。原因是二进制的补码运算就是这样的规律。[/quote]
不过你用vc++就不会那样的结果了,这时就可以输出32768了。
4 楼
透明世界 [专家分:0] 发布于 2011-06-18 07:42:00
嗯嗯,知道了,谢谢
我来回复