问题:如果一个整数有至少一个二进制位是1,计算出它哪一个二进制为1(找到任意一位即可)。
示例: 比如输入整数的二进制表示 10101000 ,那么输出以下任何一个都可以
10000000
00100000
00001000
方法:
- 通过简单位运算实现
func getMinBitOfOne(a int) int {
if a == 0 {
return 0
}
b := a-1
c := ^b
return a&c
}
- 通过循环+位运算实现
func getMinBitOfOne(a int) int {
if a == 0 {
return 0
}
m := 1
for m != 0 && a&m == 0 {
m <<= 1
}
return m
}
测试代码:
import "fmt"
func main() {
d := getMinBitOfOne(1050)
fmt.Println(d)
d = getMinBitOfOne(0)
fmt.Println(d)
d = getMinBitOfOne(-10)
fmt.Println(d)
}