2013-09-23 25 views
2

我想运行此代码,我使用short int。使用short int时突然跳转值

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

输出继电器(使用短整型):

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

为什么会出现骤升价值32767个任何解释?

我使用的是linux(32位)操作系统。

+2

您正在导致整数溢出,所以这导致** undefined behvaiour **。 –

+0

您还在指定'%u'(即'unsigned int'),但提供了'signed short'。这也导致了**未定义的行为**。 –

+0

另外,看你的printf转换说明符。 '%u'将打印一个无符号英寸'%hd'会更适合(有符号)short int。 –

回答

2

带符号整数溢出是未定义的行为。您的程序将i推到超出可存储在short中的范围之外,因此该程序完全可以自由地执行任何操作。

0

从-32768到32767的有符号短符号范围和从0到65535的无符号短符号范围。所以您超过了签名为int short的数据大小。

相关问题