回 帖 发 新 帖 刷新版面

主题:c语言的一个小问题

main()
{
    short int i;
    i=32767;
    i=i+1;
    printf("%d\n",i);
}

请问哪位大侠能帮在下分析下为何最后结果是-32768?

回复列表 (共4个回复)

沙发


我把你的代码运行了下改成下面的输出的就是32768
#include<iostream>
int main()
{
    int i;
    i=32767;
    i=i+1;
    printf("%d\n",i);
    return i;
}

板凳

因为溢出了。short的范围-32768~32767。当你超过最大范围就会回绕到最小,同理超过最小的就会回绕到最大。原因是二进制的补码运算就是这样的规律。

3 楼

[quote]因为溢出了。short的范围-32768~32767。当你超过最大范围就会回绕到最小,同理超过最小的就会回绕到最大。原因是二进制的补码运算就是这样的规律。[/quote]
不过你用vc++就不会那样的结果了,这时就可以输出32768了。

4 楼


嗯嗯,知道了,谢谢

我来回复

您尚未登录,请登录后再回复。点此登录或注册