【程序员面试宝典读书笔记】n&(n-1)

n&(n-1)是我在看《程序员面试宝典》时看到的。

&:在这里代表按位与,表示参加运算的两个数据,按二进制位进行“与”运算。

n&(n-1)的作用:将n的二进制位中最低位的1改为0。

举个例子:设n=(1100)(二进制),则n-1=(1011)(二进制),n&(n-1)=(1000)(二进制),原来最低位的1变成了0。

以下是n&(n-1)的应用:

1、求某个数的二进制表示中1的个数

int fun(int x)
{
    int count=0;
    while(x)
    {
        count++;
        x&=(x-1);
    }
    return count;
}

2、判断一个数是否是2的幂次方

n>0&&(n&(n-1))==0

2的幂次方在计算机中用二进制表示是这样的数:只在某一位是1,其余各位都为0,如2=(0010)(二进制),8=(1000)(二进制),因此(n&(n-1))==0是2的幂次方的必要条件。但当n是0时,也满足(n&(n-1))==0,因此需要设定n>0。


转载于:https://www.cnblogs.com/ruan875417/p/4495587.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值