&的运算实例
&是二进制按位与运算符,参加运算的两个数会以二进制的形式按位进行运算,运算规则如下:
- 0 & 0 = 0
- 0 & 1 = 0
- 1 & 0 = 0
- 1 & 1 = 1
按位与运算,当且仅当对应位次的数均为1的时候结果才为1,否则为0.
举个栗子:
6 & 7 = 6
解释:
6 -> 0000 0110
7 -> 0000 0111
0000 0110 (6)
0000 0111 (7)
0000 0110 (6)
对应位按上述规则依次运算。
运用实例
例一:
求一个数转化为二进制后1的个数
代码:
int count(int x) {
int shu = 0;
while (x != 0) {
x &= (x - 1);
shu++;
}
return shu;
}
原理:
每执行一次x = x & (x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。因此,对 x 重复该操作,直到 x 变成 0,则操作次数即为 x 的二进制数中的 1 的数目。
推荐题目:
338. 比特位计数
题目详解欢迎参考小编的另一篇博客╭☞(  ̄ ▽ ̄)╭☞338. 比特位计数
例二:
判断一个数是否为2的幂次方
代码:
bool isPowerOfTwo(int n){
return n > 0 && (n&(n-1)) == 0 ? 1 : 0;
}
原理:
如果一个数是2的幂次方,那么这个数用二进制表示时其最高位为1,其余位为0。因此,仅当n & (n-1)等于0的时候(n > 0),n才是2的幂次方。
推荐题目:
231. 2 的幂