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

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

位移 << 和乘法 * 優先級

位移 << 和乘法 * 優先級

Go
繁花不似錦 2022-06-13 17:17:14
在 Go 操場上嘗試了這段代碼:package mainimport (    "fmt")func main() {    log2Dim := uint32(9)        SIZE := 1 << 3 * log2Dim    fmt.Printf("Result: %v\n", SIZE)        SIZE = 1 << (3 * log2Dim)            // => only difference: adding ( )    fmt.Printf("Result: %v\n", SIZE)}這是打印出來的:Result: 72Result: 134217728為什么僅僅添加到包含和操作( )的語句中會產生巨大的差異?<<*據此,*有更高的優先級,<<也就是谷歌搜索bitshift優先級golang的第一個結果。
查看完整描述

2 回答

?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

您鏈接到的頁面是錯誤的。Go 只有一個規范,運算符優先級非常清楚:


二元運算符有五個優先級。乘法運算符綁定最強,其次是加法運算符、比較運算符、&&(邏輯與),最后是 || (邏輯或):


    5             *  /  %  <<  >>  &  &^

    4             +  -  |  ^

    3             ==  !=  <  <=  >  >=

    2             &&

    1             ||

相同優先級的二元運算符從左到右關聯。例如,x / y * z 與 (x / y) * z 相同。


乘法和移位具有相同的優先級,因此適用“從左到右”規則,使您的代碼相當于(1 << 3) * log2Dim


請注意,從左到右表示在代碼中,而不是在優先級表中。從規范中給出的示例可以看出這一點。


查看完整回答
反對 回復 2022-06-13
?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

二元運算符有五個優先級。*并且<<具有相同的優先級: 5. 相同優先級的二元運算符從左到右關聯,所以1 << 3 * log2Dim等價于(1 << 3) * log2Dim

來源:https ://golang.org/ref/spec#Operators


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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