2013-07-14 34 views
-8

unsigned int與uint32_t相同嗎?這是32位無符號整數,而不是2恭維吧?unsigned int T = 0xFFFFFFFF等於-1在C?它不應該作爲2無符號後正確的工作嗎?

uint32_t y = 0xFFFFFFFF; // gives -1 i dont get why is it negative? 
uint8_t x = 0b11111111; // gives 255 i understand this 
+1

你是什麼意思的「給-1」?你可以添加一些代碼來顯示你的問題? – simonc

+1

你是如何打印出來的? – Mysticial

+1

'uint32_t y = 0xFFFFFFFF;'與'uint32_t y = -1;'相同,但它是一個正值('2^32 - 1')。你是如何打印它來獲得'-1'輸出的? –

回答

7

您顯示的位模式表示有符號整數爲-1,如果它表示無符號整數則表示最大值。

當你說它「給-1」時,你應該看看你如何檢查。例如,如果您使用printf打印它,則應確保使用無符號格式說明符。

-1

uint32_t y = 0xFFFFFFFF; //給出-1我不明白爲什麼它是負面的?

爲什麼它是負數的原因是,因爲根據定義,任何設置了highes重要位的數字在使用簽名類型時被解釋爲負數。在你的情況下,這個值通常不會被認爲是負數,因爲uint被認爲是無符號的。

因此,這意味着,例如:

0xFFFF的爲-1時爲16位的整數考慮,但使用的是32位整數當相同的值不爲負。

如果使用適當的轉換,編譯器將擴​​展簽名。因此,如果將上述值適當提升爲32位整數,則該值仍然爲-1。

+0

-1它不是負面的。 OP可能試圖用'printf(「%d」,...)'打印它來調用UB。 –

相關問題