- 如何判断两个整数(32位)只有一个位不同?
- 获取一个32-bit整数中值为1的二进制位的个数?
x = x & 0x55555555 + (x >> 1) & 0x55555555;
x = x & 0x33333333 + (x >> 2) & 0x33333333;
x = x & 0x0f0f0f0f + (x >> 4) & 0x0f0f0f0f;
x = x & 0x00ff00ff + (x >> 8) & 0x00ff00ff;
x = x & 0x0000ffff + (x >> 16) & 0x0000ffff;
另一种方法
x = (x & 0xAAAAAAAA) >> 1 + (x & 0x55555555);
x = (x & 0xcccccccc) >> 2 + (x & 0x33333333);
x = (x & 0xf0f0f0f0) >> 4 + (x & 0x0f0f0f0f);
x = (x & 0xff00ff00) >> 8 + (x & 0x00ff00ff);
x = (x & 0xffff0000) >> 16 + (x & 0x0000ffff);
- 用位运算对整数求绝对值
int sign = x >> 31;
x = (x ^ sign) - sign;
- 二进制逆序
x = ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1);
x = ((x & 0xcccccccc) >> 1) | ((x & 0x33333333) << 1);
x = ((x & 0xf0f0f0f0) >> 1) | ((x & 0x0f0f0f0f) << 1);
x = ((x & 0xff00ff00) >> 1) | ((x & 0x00ff00ff) << 1);
x = ((x & 0xffff0000) >> 1) | ((x & 0x0000ffff) << 1);