簡體   English   中英

從unsigned long long轉換為unsigned int

[英]converting from unsigned long long to unsigned int

我正在尋找一個小小的試圖找到答案,但我找不到明確的答案。
我看到這個答案,他寫的是旁注:

對於無符號類型,規則是不同的; 將有符號或無符號整數轉換為無符號類型的結果已得到很好的定義。

那么明確定義的行為是什么?
unsigned long long轉換為unsigned int是否存在已定義的行為? 它只是切斷了32 MSB的? (留下我的32 LSB)。
讓我們假設sizeof(unsigned int)4sizeof(unsigned long long)在我的系統中是8
在沒有強制轉換的情況下進行分配以及使用強制轉換進行分配時是否存在不同

標准說:

6.3.1.3有符號和無符號整數
1當具有整數類型的值轉換為除_Bool之外的另一個整數類型時,如果該值可以由新類型表示,則它將保持不變。
2否則,如果新類型是無符號的,則通過重復加或減一個可以在新類型中表示的最大值來轉換該值,直到該值在新類型的范圍內。 49)
3否則,新類型已簽名且值無法在其中表示; 結果是實現定義的,或者引發實現定義的信號。

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

如果你使用鑄造沒有區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM