我剛剛開始閱讀ISO C 2011標準,以及它的最後一個公開草案[1],並且意識到在C詞法分析器[1] [458ff。]中,所有(字面)數字常量都是無符號。ISO C和帶符號立即數常量
這是否意味着編譯器將有符號數值常量(如-5.1E10或-1) 解釋爲相應一元運算符的調用? 例如-1 < => - (1),512 < => +(512)
UPDATE: 我的故障, 「所有(文字)的數值常數是無符號的」 我的意思是「所有(文字)的數值常量是非負」
方面,托馬斯
我剛剛開始閱讀ISO C 2011標準,以及它的最後一個公開草案[1],並且意識到在C詞法分析器[1] [458ff。]中,所有(字面)數字常量都是無符號。ISO C和帶符號立即數常量
這是否意味着編譯器將有符號數值常量(如-5.1E10或-1) 解釋爲相應一元運算符的調用? 例如-1 < => - (1),512 < => +(512)
UPDATE: 我的故障, 「所有(文字)的數值常數是無符號的」 我的意思是「所有(文字)的數值常量是非負」
方面,托馬斯
所有非後綴十進制整數文字都有符號,但不能是負數。也許非負面的是你的意思是「無符號」,但我認爲重要的是要作出區分 - 它們不是unsigned int
類型。
一旦你得到了肯定的文字,就應用一元運算符。這就是爲什麼INT_MIN
通常被定義爲:
#define INT_MIN (-2147483647 - 1)
因爲你不能用這個平臺上signed int
表示2147483648。
是的,你的解釋是正確的,所有的數字文字不包括符號,最終標誌是一元運算符適用於它。
文字的類型是這樣選擇的,即文字的值在該類型中是可表示的,所以有效的有效數字文字總是表示正值。
所有(文字)數字常量都是無符號的。
這是錯誤的,實際上只有非前綴的十進制整數文字被簽名。其他整數文字是無符號或有符號的。
這是否意味着編譯器將有符號數值常量(如-5.1E10或-1)解釋爲相應一元運算符的調用? e.g -1 < => - (1),512 < => +(512)
如果應用-
爲無符號文字,其結果爲(通常)仍然無符號的。 例如:
-1U // unsigned quantity
-0xFFFFFFFF // unsigned quantity (assuming 32-bit int)
簽名的結果至C整數轉換規則轉換成無符號的。
不,不是所有文字都被簽名,你可能意思是「沒有'U'後綴的所有小數文字都被簽名」。即使沒有「U」後綴,八進制和十六進制文字也可以無符號。 –
正確的是你。 +1。 –