有符號整數溢出是否仍然是C+中未定義的行為?我們知道,有符號整數溢出是未定義的行為。..但是在C+11中有一些有趣的東西cstdint文件:帶符號整數類型,寬度分別為8、16、32和64位,沒有填充位和對負值使用2的補碼(只有在實現直接支持類型時才提供)見鏈接這是我的問題:因為標準明確規定int8_t, int16_t, int32_t和int64_t負數是2的補碼,這些類型的溢出是否仍是一種未定義的行為?編輯我檢查了C+11和C11標準,下面是我發現的:C+11,第18.4.1節:標頭定義了與C標準中的7.20相同的所有函數、類型和宏。C11,第7.20.1.1節:類型胡枝子名稱intN_t指定帶符號整數類型,其寬度為N,沒有填充位,并指定兩個補碼表示形式。因此,int8_t表示這樣一個帶符號整數類型,寬度正好為8位。
3 回答

MYYA
TA貢獻1868條經驗 獲得超4個贊
1.3.24未定義的行為
本國際標準不要求的行為
[注意:如果本國際標準遺漏了任何明確的行為定義,或者當程序使用錯誤的構造或錯誤的數據時,可能會出現未定義的行為。允許的未定義行為包括:完全忽略這種情況而導致不可預測的結果;在翻譯或程序執行過程中以具有環境特征的記錄方式(無論是否發布診斷消息);終止翻譯或執行(通過發布診斷消息)。許多錯誤的程序構造不會產生未定義的行為;它們需要被診斷。

慕的地10843
TA貢獻1785條經驗 獲得超8個贊
這些類型的溢出是否仍然是未定義的行為?
是。
如果在計算表達式時,結果沒有數學定義,或者不在其類型的可表示值范圍內, 行為未定義. [...]
無符號整數,聲明 unsigned
, 應遵守算術模2^n定律其中n是該整數特定大小的值表示中的位數。
46)這意味著 未簽名算術不會溢出,因為不能用結果無符號整數類型表示的結果將被減少,即大于結果無符號整數類型所能表示的最大值的數字。
- 3 回答
- 0 關注
- 615 瀏覽
添加回答
舉報
0/150
提交
取消