2 回答

TA貢獻1850條經(jīng)驗 獲得超11個贊
我認為以下回答了您的問題:
6.3.1.3有符號和無符號整數(shù)
1將整數(shù)類型的值轉(zhuǎn)換為_Bool以外的其他整數(shù)類型時,如果該值可以用新類型表示,則該值不變。
2否則,如果新類型是無符號的,則通過重復添加或減去比新類型可表示的最大值多一個值來轉(zhuǎn)換值,直到該值在新類型的范圍內(nèi)為止。
3否則,將對新類型進行簽名,并且無法在其中表示值;結(jié)果是實現(xiàn)定義的,還是引發(fā)實現(xiàn)定義的信號。

TA貢獻1852條經(jīng)驗 獲得超7個贊
我認為您在混淆兩件事。提升是將int / unsigned int的“較小”整數(shù)類型的值轉(zhuǎn)換為int或unsigned int的過程。這些規(guī)則有些奇怪(主要是為了充分處理char),但要確保其值和符號得到保留。
然后是普通算術(shù)轉(zhuǎn)換的不同概念,通過該概念,算術(shù)運算符的操作數(shù)被轉(zhuǎn)換為通用類型。首先,如果操作數(shù)的類型小于int,則將其提升為int或unsigned,然后通過以下過程選擇目標類型(對于整數(shù)類型6.3.1.8/1)
如果兩個操作數(shù)具有相同的類型,則無需進一步轉(zhuǎn)換。
否則,如果兩個操作數(shù)都具有符號整數(shù)類型或都具有無符號整數(shù)類型,則將具有較小整數(shù)轉(zhuǎn)換等級的操作數(shù)轉(zhuǎn)換為具有較大等級的操作數(shù)的類型。
否則,如果具有無符號整數(shù)類型的操作數(shù)的秩大于或等于另一個操作數(shù)的類型的秩,則將帶符號整數(shù)類型的操作數(shù)轉(zhuǎn)換為無符號整數(shù)類型的操作數(shù)的類型。
否則,如果帶符號整數(shù)類型的操作數(shù)的類型可以表示帶無符號整數(shù)類型的操作數(shù)的所有值,則帶無符號整數(shù)類型的操作數(shù)將轉(zhuǎn)換為帶符號整數(shù)類型的操作數(shù)的類型。
否則,兩個操作數(shù)都將轉(zhuǎn)換為與帶符號整數(shù)類型的操作數(shù)類型相對應(yīng)的無符號整數(shù)類型。
(請注意ISTR,這些規(guī)則在C89和C99之間略有變化)
- 2 回答
- 0 關(guān)注
- 654 瀏覽
添加回答
舉報