亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

具有無符號值的位移給出有符號結果

具有無符號值的位移給出有符號結果

Go
Qyouu 2022-06-13 17:16:48
使用無符號uint32變量進行位移運算,為什么會int收到有符號結果?func NewNM(log2Dim uint32) {    SIZE := 1 << (3 * log2Dim) // Why: SIZE type == int    // ...}
查看完整描述

1 回答

?
斯蒂芬大帝

TA貢獻1827條經驗 獲得超8個贊

來自go 語言參考

移位表達式中的右操作數必須是整數類型或者是可由 uint 類型的值表示的無類型常量。如果非常量移位表達式的左操作數是無類型常量,則首先將其隱式轉換為僅將移位表達式替換為其左操作數時假定的類型。

然后...

移位運算符將左操作數移位由右操作數指定的移位計數,該移位計數必須為非負數。如果班次計數在運行時為負數,則會發生運行時恐慌。如果左操作數是有符號整數,則移位運算符實現算術移位,如果左操作數是無符號整數,則實現邏輯移位。

所以1表達式1 << (3 * log2Dim)中的根據第一段轉換為an int,然后移位是根據第二段算術移位。


查看完整回答
反對 回復 2022-06-13
  • 1 回答
  • 0 關注
  • 143 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號