ibeautiful
2023-06-26 17:02:30
當(dāng)將負(fù)數(shù)轉(zhuǎn)換為無符號整數(shù)并隨后添加該值時,會導(dǎo)致減法。a := (uint8)(10)
b := (int8)(-8)
fmt.Println(a + (uint8)(b)) // result: 2這是一種慣用的方法還是應(yīng)該更明確地進(jìn)行?
1 回答

慕尼黑5688855
TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊
由于該類型是無符號的,因此它是溢出:uint8(b)
是248
,所以a + uint8(b)
是10+248=258=> 255 0 1 2 => 2
我的問題更多是關(guān)于當(dāng)值(有時您想加,有時想減)來自參數(shù)(必須是有符號類型)時如何從無符號整數(shù)中減去,這使得您必須在減法之前進(jìn)行類型轉(zhuǎn)換/添加。
同時使用int8
:
? ? a := int8(10)
? ? b := int8(-8)
? ? fmt.Println(a + b) // 2
? ? fmt.Println(a - b) // 18
您可以避免溢出,如下所示:
? ? a := uint8(10)
? ? b := int8(-8)
? ? c := uint8(b)
? ? d := uint16(a) + uint16(c)
? ? fmt.Println(d) // 258
您應(yīng)該在此處刪除多余的括號:
a := (uint8)(10)
b := (int8)(-8)
fmt.Println(a + (uint8)(b))
用這個:
a := uint8(10)
b := int8(-8)
fmt.Println(a + uint8(b))
- 1 回答
- 0 關(guān)注
- 210 瀏覽
添加回答
舉報
0/150
提交
取消