假設在一個平臺上,最小有符號值是 -2^15 = -32768,最大值是 2^15 -1 = 32767。那么常量 32768 不適合
signed,因此是signed long。因此,運算式 -32768 的型別為signed long。因此signed,此類平臺上型別的最小值不能寫為文字常量。來自Jens Gustedt 的Modern C。
很容易理解為什么 32768 是有符號長的,但是為什么 -32768 也是有符號長的而不是有符號的,因為 -32768 的最小有符號值?
uj5u.com熱心網友回復:
因為 -32768 是正數 32768(它不適合 16 位值,因此必須由下一個更大的型別表示),然后對其應用一元減號(不會改變型別)。
如果你寫例如 ( ( - 32767 ) - 1 ),你會得到 int 型別的常量。
uj5u.com熱心網友回復:
如果int是您的平臺中的 16 位型別,則 32768 不適合它。因此32768必須有下一個更大的型別,即long. -32768不是負整數文字,而是應用于文字的一元減號32768。既然32768是long,那么-32768
這與
- -9'223'372'036'854'775'808LL 未簽名
- 為什么最小的整數 -2147483648 的型別是“long”?
- 為什么 MSVC 選擇 long long 作為 -2147483648 的型別?
uj5u.com熱心網友回復:
-32768實際上不是整數文字。它是應用32768了一元運算-符的整數文字。
由于在此系統上,值 32768 超出 的范圍int,因此常量的32768型別為long。將一元-應用于 type 的值會產生 typelong的運算式long,因此-32768具有 type long。
一種使用 type 獲取值 -32768 的方法int,正確的運算式是-32767 - 1. 整數常量的32767型別為int。-對它應用一元運算符仍然給我們一個范圍為 的值int,然后減去 1 給我們一個型別int為 -32768的運算式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/363028.html
上一篇:C中的結構填充
下一篇:平均值計算不正確
