文章目录
1.判断整数a的奇偶性
- 若a是偶数:
a&1==1
- 若a是奇数:
a&1==0
原理:任何偶数二进制第一位数必定0,而奇数必定是1,而1的二进制就是1,
2.不用中间变量来交换两个变量的值
void swap(int* a, int* b) {
*a ^= (*b);
*b ^= (*a);
*a ^= (*b);
}
虽然没有用到中间变量,但还是得把a、b的地址传过来。
3.整数a乘以2n或除以2n
乘:
a<<n
除:
a>>n
4. 取整数a的第i位
a>>i&1
5.取模运算转换为位运算
a % (2^n)
等价于 a & (2^n - 1)
6.整数a取反
a=(~a+1);
7. 取平均值
int average(int a, int b) {
return (a & b) + ((a ^ b) >> 1);
}
对于两个整数a,b,如果用 (a+b)/2
求平均值,会产生溢出,因为 a+b·
可能会大于INT_MAX
,但是我们知道它们的平均值是肯定不会溢出的。
8.判断一个整数是不是2的幂次
bool power2(int a) {
return ((a & (a - 1)) == 0) && (a != 0);
}