是-2^(31)在 C 標準中否定定義為未定義行為的整數,還是-2^(31)再次否定?嘗試后者成立,但知道 C 標準如何指定它會很有趣。
uj5u.com熱心網友回復:
標準(n2176 草案)在 6.5 Expressions § 5 中明確指出:
如果在計算運算式期間出現例外情況(即,如果結果未在數學上定義或不在其型別的可表示值范圍內),則行為未定義。
我們就在那里:結果不是型別的可表示值的范圍,所以它明確地是 UB。
話雖如此,大多數實作使用 2' 補碼來處理負值,并將有符號型別的操作處理為對具有相同表示的無符號型別值的操作。這是完美定義的。
因此-2^(31),可以在常見的實作中再次獲得。但正如標準所說的那樣,它是UB,它不能被依賴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416418.html
標籤:
上一篇:列印n個數字的所有排列
