long 保證有 32 位嗎?
儘管基於 C 標準的常見假設,但問題是 long 是否保證有至少 32 位。標準將基本整數型別分類為:
sizeof(char) ≤ sizeof(short int) ≤ sizeof(int) ≤ sizeof(long int)
然而,許多人認為基於此層次結構,long 必須有32 位元。然而,標準明確指出位元組中的位數是實現定義的。
Alf P. Steinbach 的聲明
儘管這看起來矛盾,Alf P. Steinbach 斷言 long 保證為 32 位。他的這項主張是基於對 long 可以保存的值範圍(LONG_MIN 到 LONG_MAX)的隱式限制。
C 標準引用了 C 標準 (18.3.2),其中定義了:
LONG_MIN ≤ -2^31 1 LONG_MAX ≥ 2^31 - 1
與 32 位元表示的連接
明確符號位:如果負數使用符號位,則總儲存空間仍需要 32 位元。
結論
雖然 C 標準沒有明確要求 long 具有 32 位,但最小範圍要求(LONG_MIN 到 LONG_MAX)隱含地要求它。這是因為表示這些值需要 32 位元儲存或具有等效值容量的特定於實現的機制。因此,可以得出結論,C保證long至少有32位。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3