二进制反转

位运算

Posted by Shaocong on August 28, 2019

颠倒给定的 32 位无符号整数的二进制位。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
func reverseBits(num uint32) uint32 {
    var i uint32
    for i = 0; i <= 15; i++ {
        head, tail := BitGet(num, i), BitGet(num, 31 - i)
        num = BitSet(num, i, tail)
        num = BitSet(num, 31 - i, head)
    }
    return num
}

func BitGet(num uint32, pos uint32) uint32 {
    // 获得第pos位的值
    return (num & (1 << pos)) >> pos
}

func BitSet(num uint32, pos uint32, value uint32) uint32 {
    // 重置第pos位为0
    num = num & ( ^(1 << pos))
    // 设置第pos位为:value
    return num | (value << pos)
}