go - 移位和逻辑运算给出意想不到的答案
问题描述
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。
解决方案
运算符<<
和&
具有相同的优先级,所以你实际上在做的是:
(score&1)<<shifter
看起来你需要的是:
score&(1<<shifter)
推荐阅读
- python - 遍历 df 的行并检查行中的任何值是否具有“列表”类型
- javascript - 使用 api 在反应中返回一个嵌套对象,该对象位于数组中
- c# - C# - 传入
- java - 如何在 Android 中设置 ProgressBar 的启用/禁用状态?
- java - mysql jdbc驱动中的通信链路故障
- python - 如何在 Python 中使用 JWK 解码 JWT 令牌
- php - 如何在laravel中重定向?
- bind9 - bind9 不向所有从站发送通知
- sql - 获取两个日期之间每天 24 小时的最小值/最大值
- ios - SwiftUI 预览未针对不同的方案构建:错误:没有这样的模块“MyApp”