gpt4 book ai didi

go - 位移 << 和乘法 * 优先级

转载 作者:行者123 更新时间:2023-12-01 22:42:32 29 4
gpt4 key购买 nike

试过这个代码on Go playground :

package main

import (
"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: 72
Result: 134217728
为什么添加 ( ) 会有很大的不同到包含 << 的语句和 *操作?
根据 this , *优先于 << ,这是谷歌搜索移位优先golang的第一个结果。

最佳答案

您链接到的页面是错误的。 Go 只有一个规范,并且很清楚 operator precedence :

There are five precedence levels for binary operators. Multiplication operators bind strongest, followed by addition operators, comparison operators, && (logical AND), and finally || (logical OR):

    5             *  /  %  <<  >>  &  &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

Binary operators of the same precedence associate from left to right. For instance, x / y * z is the same as (x / y) * z.


乘法和移位具有相同的优先级,因此适用“从左到右”规则,使您的代码等效于 (1 << 3) * log2Dim请注意,从左到右表示在代码中,而不是在优先表中。从规范中给出的示例可以看出这一点。

关于go - 位移 << 和乘法 * 优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62838371/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com