2016-11-29 76 views
0

爲什麼執行此操作時會得到負數?如何通過位移將unsigned int轉換爲負數?

unsigned int a = 1 << 31; 
printf("%d",a); 

我已經檢查過我的電腦上的整數大小,它是4字節。所以我的整數由32位組成,並且向左移動31次,直到最重要的位。這意味着它應該是正數,但我總是負面的。

我能得到什麼:-2147483648

我所期待的:一些正數(大概1073741824)

缺少什麼我在這裏?

+2

你打印出來的籤! –

+0

'printf(「%u」,a);'應該修復它。 – 2016-11-29 16:05:01

回答

0

使用%u作爲printf格式字符串。

含義:

printf("%u",a); 
0

除了你使用了錯誤的格式說明(中%d代替%u),你可能會由1移入標誌調用未定義行爲如this answer中所述,操作數爲int
要修復它,用一個無符號的文字:

unsigned int a = 1u << 31; 
//    ^