首页 > 解决方案 > 移位和逻辑运算给出意想不到的答案

问题描述

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")
    }
}

我期望 5 & 8 应该是 0,但我看到 8 作为按位与之后的答案。我究竟做错了什么?AFAICT,<< 对整数类型进行操作,应该给我 0。

标签: go

解决方案


运算符<<&具有相同的优先级,所以你实际上在做的是:

(score&1)<<shifter

看起来你需要的是:

score&(1<<shifter)

推荐阅读