CodeQL 文档

按位异或用作幂运算

ID: go/mistyped-exponentiation
Kind: problem
Security severity: 
Severity: warning
Precision: high
Tags:
   - correctness
Query suites:
   - go-security-and-quality.qls

点击查看 CodeQL 存储库中的查询

插入符号 (^) 有时用于表示幂运算,但在 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
}

参考

  • ©GitHub 公司
  • 条款
  • 隐私