按位异或用作幂运算¶
ID: go/mistyped-exponentiation
Kind: problem
Security severity:
Severity: warning
Precision: high
Tags:
- correctness
Query suites:
- go-security-and-quality.qls
插入符号 (^
) 有时用于表示幂运算,但在 Go 中(与许多类 C 语言一样),它表示按位异或运算。因此,表达式 2^32
计算的结果是数字 34,而不是 232,像这样的模式很可能是错误的。
建议¶
要计算 2EXP
,可以使用 1 << EXP
。对于常量指数,可以使用 1eEXP
来查找 10EXP
。在其他情况下,可以使用 Go 标准库中的 math.Pow
来提供此功能。
示例¶
以下示例打印 34,而不是 232 (4294967296)。
package main
import "fmt"
func main() {
fmt.Println(2 ^ 32) // should be 1 << 32
}
参考¶
GCC Bugzilla:GCC 应该警告 2^16、2^32 和 2^64