博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解释代码(n&(n-1))==0的具体含义
阅读量:6154 次
发布时间:2019-06-21

本文共 636 字,大约阅读时间需要 2 分钟。

hot3.png

1)(A&B)==0的含义

 

A和B的二进制表示的同一位置绝不会同为1。

 

2)n和n-1

若n的最低有效位为1,减去1后为0,其余为均相同,不符合要求。n的最低有效位为0,减去1时,必须向高位借1。

 

3)(n&(n-1))==0的含义

假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 = 100 = 4 != 0,下面我们来看更多的例子:

5 & 4 = 101 & 100 = 4 6 & 5 = 110 & 101 = 4 7 & 6 = 111 & 110 = 6 8 & 7 = 1000 & 0111 = 0

我们会发现要使表达式等于0,n-1必须使得n的n-1都向高位进1,也就是说满足一下条件:

x + 1 = n x & n = 0

我们来看看有那些数能满足要求:

10 & 01 = 0   -------2^1100 & 011 = 0  -------2^21000 & 0111 = 0  -------2^310000 & 01111 = 0  -------2^4。。。。。。

所谓代码((n & (n-1))== 0)的含义是n满足2的n次方

n的最高有效位为1,其余位为0。因此,n的值是2的某次方。

所以,(n&(n-1))==0检查n是否为2的某次方(或者检查n是否为0

转载于:https://my.oschina.net/u/2822116/blog/790384

你可能感兴趣的文章
Android开发之自定义对话框
查看>>
微信Access Token 缓存方法
查看>>
Eclipsed的SVN插件不能识别之前工作空间的项目
查看>>
Linux 查看iptables状态-重启
查看>>
amazeui学习笔记一(开始使用2)--布局示例layouts
查看>>
c#中lock的使用(用于预约超出限额的流程)
查看>>
ODI基于源表时间戳字段获取增量数据
查看>>
并发容器之CopyOnWriteArrayList(转载)
查看>>
什么是AAC音频格式 AAC-LC 和 AAC-HE的区别是什么
查看>>
原创:goldengate从11.2升级到12.1.2
查看>>
Quartz
查看>>
正则表达式的语法规则
查看>>
C#一个关于委托和事件通俗易懂的例子
查看>>
类似于SVN的文档内容差异对比工具winmerge
查看>>
Cause: java.sql.SQLException: The user specified as a definer ('root'@'%') does not exist
查看>>
quratz线程
查看>>
execnet: rapid multi-Python deployment
查看>>
windows修改3389端口
查看>>
关于JavaScript词法
查看>>
FreeSwitch中的会议功能(4)
查看>>