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
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」時,你應該看看你如何檢查。例如,如果您使用printf打印它,則應確保使用無符號格式說明符。
uint32_t y = 0xFFFFFFFF; //給出-1我不明白爲什麼它是負面的?
爲什麼它是負數的原因是,因爲根據定義,任何設置了highes重要位的數字在使用簽名類型時被解釋爲負數。在你的情況下,這個值通常不會被認爲是負數,因爲uint被認爲是無符號的。
因此,這意味着,例如:
0xFFFF的爲-1時爲16位的整數考慮,但使用的是32位整數當相同的值不爲負。
如果使用適當的轉換,編譯器將擴展簽名。因此,如果將上述值適當提升爲32位整數,則該值仍然爲-1。
-1它不是負面的。 OP可能試圖用'printf(「%d」,...)'打印它來調用UB。 –
你是什麼意思的「給-1」?你可以添加一些代碼來顯示你的問題? – simonc
你是如何打印出來的? – Mysticial
'uint32_t y = 0xFFFFFFFF;'與'uint32_t y = -1;'相同,但它是一個正值('2^32 - 1')。你是如何打印它來獲得'-1'輸出的? –