使用無符號uint32變量進(jìn)行位移運算,為什么會int收到有符號結(jié)果?func NewNM(log2Dim uint32) { SIZE := 1 << (3 * log2Dim) // Why: SIZE type == int // ...}
1 回答

斯蒂芬大帝
TA貢獻(xiàn)1827條經(jīng)驗 獲得超8個贊
來自go 語言參考
移位表達(dá)式中的右操作數(shù)必須是整數(shù)類型或者是可由 uint 類型的值表示的無類型常量。如果非常量移位表達(dá)式的左操作數(shù)是無類型常量,則首先將其隱式轉(zhuǎn)換為僅將移位表達(dá)式替換為其左操作數(shù)時假定的類型。
然后...
移位運算符將左操作數(shù)移位由右操作數(shù)指定的移位計數(shù),該移位計數(shù)必須為非負(fù)數(shù)。如果班次計數(shù)在運行時為負(fù)數(shù),則會發(fā)生運行時恐慌。如果左操作數(shù)是有符號整數(shù),則移位運算符實現(xiàn)算術(shù)移位,如果左操作數(shù)是無符號整數(shù),則實現(xiàn)邏輯移位。
所以1
表達(dá)式1 << (3 * log2Dim)
中的根據(jù)第一段轉(zhuǎn)換為an int
,然后移位是根據(jù)第二段算術(shù)移位。
- 1 回答
- 0 關(guān)注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消