使用short int时突然跳转值

时间:2013-09-23 23:44:20

标签: c type-conversion

我正在尝试运行此代码,其中我使用short int。

int main() {
    short int i=0;
    while(++i)
        printf("%u\n", i);
}

输出(使用短int):

 1     
 2
 3...
 32767
 4294934528
 .
 .
 4294967295(last value)

为什么在32767之后有任何解释突然跳跃?

我正在使用linux(32位)操作系统。

2 个答案:

答案 0 :(得分:2)

有符号整数溢出是未定义的行为。你的程序将i超出了short中可以存储的范围,因此程序可以自由地执行任何操作。

答案 1 :(得分:0)

有符号短消息的范围为-32768到32767,无符号短消息的范围为0到65535.因此,您超出了已签名的int short的数据大小。