记录一些二进制的应用技巧。
清零一个数的最左边或最右边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
即可。