在C中被簽名為無符號轉換-它總是安全的嗎?假設我有以下C代碼。unsigned int u = 1234;int i = -5678;unsigned int result = u + i;這里正在進行什么隱式轉換,這段代碼對所有的值都是安全的嗎?u和i?(安全,從某種意義上說,即使結果在本例中,將溢出到某個巨大的正數,我可以將其轉換回INT得到真正的結果。)
3 回答

慕少森
TA貢獻2019條經驗 獲得超9個贊
當具有整數類型的值轉換為_bool以外的另一個整數類型時,如果該值可以由新類型表示,則它將保持不變。
否則,如果新類型沒有符號,則通過重復添加或減去比新類型中可以表示的最大值多一個值來轉換值,直到該值位于新類型的范圍內為止。
否則,將對新類型進行簽名,并且不能在其中表示值;結果要么是實現定義的,要么引發實現定義的信號。
unsigned int u = 1234;int i = -5678;unsigned int result = u + i;
UINT_MAX + 1 - 5678
UINT_MAX + 1 - 4444
.
添加回答
舉報
0/150
提交
取消