2016-08-14 198 views
3

我周圍尋找一點點試圖找到這個答案,但我找不到明確的答案。
只見this答案在他寫的便箋:從無符號長整型轉換爲無符號整型

的規則是無符號類型不同;將 帶符號或無符號整數轉換爲無符號類型的結果已定義良好。

那麼什麼是明確定義的行爲?
unsigned long long轉換爲unsigned int時是否存在定義的行爲?它只是切斷了32個MSB? (留下32個LSB)。
假設sizeof(unsigned int)4sizeof(unsigned long long)是我的系統中的8
分配時是否有不同的行爲而不投射,以及是否使用投射進行分配?

回答

4

標準表示:

6.3.1.3符號和無符號整數
1當與整數類型的值被轉換爲比其它_Bool另一個整數類型,如果該值 可以表示新的類型,它是不變的。
2否則,如果 新類型是無符號的,則該值是通過重複地添加 或減去小於能夠在新的類型來表示 直到該值是在新的類型的範圍的最大值一個更轉換。 49)
否則,新的類型被簽名並且其值不能被表示爲 ;結果是實現定義的或實現定義的信號被引發。

點2描述了一個模運算,它與在這種情況下切斷MSB具有相同的效果。 (當新類型的最大值加上1時,效果與數字基礎的功率相同。)

如果使用強制轉換,則沒有區別。

+0

感謝引用標準和回答我的具體情況。 –

相關問題