You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言位与和左移运算返回非预期结果问题咨询

问题根因

你遇到的问题是对Go语言的运算符优先级和结合性规则理解错误导致的。

Go语言中,位与运算符&和左移运算符<<属于同一优先级,同优先级的二元运算符遵循从左到右的左结合规则,因此你写的表达式score&1<<shifter不会按照你预期的score & (1 << shifter)顺序计算,实际的运算顺序是(score & 1) << shifter。

实际运算过程推演

  • 先计算score & 1:score的值为5,二进制表示为101,和1(二进制001)做位与运算的结果为1
  • 再计算1 << shifter:shifter值为3,1左移3位的结果为8
    最终整个表达式的结果就是8,和你实际运行得到的结果一致。
修复方案

给移位运算部分手动加括号,明确指定运算顺序即可得到预期结果:

func main() {
    var score int = 5
    var shifter int = 3

    if score&(1<<shifter) != 0 {
        fmt.Println(score, 1<<shifter, score&(1<<shifter))
    } else {
        fmt.Println("false")
    }
}

修改后运行会输出false,符合你的初始预期。

内容的提问来源于stack exchange,提问作者user2684533

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:15:07