记录一些二进制的应用技巧。

清零一个数的最左边或最右边n位

  • 清零最左边n位:x & ((unsigned)(~0) >> n)
  • 清零最右边n位:x & ((unsigned)(~0) << n)

判断一个整数是不是2的整数次方

bool isPowerOfTwo(unsigned int n) {
    return !(x & (x-1));
}

计算整数的二进制形式中1的个数

int countBitsOne(unsigned int n) {
    int ans = 0;
    while(n) {
		n &= n - 1;
		ans++;
    }
	return ans;
}

zigzag

参考:整数-zigzag算法


  • 无标签