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

清零一个数的最左边或最右边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算法

计算两个整数通过位翻转变成同一个数,要翻转的位数是多少位

返回x ^ y即可。 


  • 无标签