&按位与运算符,妙哉!

&的运算实例

&是二进制按位与运算符,参加运算的两个数会以二进制的形式按位进行运算,运算规则如下:

  • 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 的幂

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WTY2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值