获取一个整数某一个是1的二进制位

216 阅读1分钟

问题:如果一个整数有至少一个二进制位是1,计算出它哪一个二进制为1(找到任意一位即可)。

示例: 比如输入整数的二进制表示 10101000 ,那么输出以下任何一个都可以

10000000   
00100000
00001000

方法:

  1. 通过简单位运算实现
func getMinBitOfOne(a int) int {
    if a == 0 {
        return 0
    }
    b := a-1
    c := ^b
    return a&c
}
  1. 通过循环+位运算实现
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)
}