2013-09-23 69 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的數據大小。

相關問題