文档章节

解释代码(n&(n-1))==0的具体含义

一贱书生
 一贱书生
发布于 2016/11/18 15:23
字数 311
阅读 34
收藏 0

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^1
100 & 011 = 0  -------2^2
1000 & 0111 = 0  -------2^3
10000 & 01111 = 0  -------2^4
。。。。。。

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

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

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

© 著作权归作者所有

共有 人打赏支持
一贱书生
粉丝 19
博文 724
码字总数 600123
作品 0
linux的shell变量之传参

linux中shell变量$#,$@,$0,$1,$2的含义解释 摘抄自:ABS_GUIDE 示例: 其中s@与s*区别: $* 与 $@ 区别: 相同点:都是引用所有参数。 不同点:只有在双引号中体现出来。假设在脚本运行时写了...

ziwenzhou
2017/05/07
0
0
解释代码((n & (n-1))== 0)的含义

思路: 初步查看很难一眼分析出表达式是什么含义,我们不妨举例分析一下,假设 n = 5,二进制表示为101,那么 n-1 = 4,二进制表示为100, 5 & 4 = 101 & 100 = 100 = 4 != 0,下面我们来看...

borey
2014/09/11
0
0
Linuxl中shell变量$#、$@、$0、$1、$2的含义解释

、$@、$0、$1、$2的含义解释 :Shell本身的PID(ProcessID)。 :Shell最后运行的后台Process的PID。 :最后运行的命令的结束代码(返回值)。 :使用Set命令设定的Flag一览。 :所有参数列表...

SharkYu
02/28
0
0
我来理解for循环

简单示例 先看一段简单的代码: 这段代码的含义是什么?求和:sum = 1 + 2 + 3 + .. + n,当前n为5。 这段代码是怎么执行呢? 声明sum,,并赋值0。(int sum = 0) 声明n,赋值为5。(int n...

艳沐石
2016/12/28
17
0
Linux基础教程 linux下使用find命令根据系统时间查找文件用法

   Linux基础教程 linux下使用find命令根据系统时间查找文件用法 LinuxFind 兄弟连 小编总结这些时间戳包括   复制代码代码如下:   mtime 文件内容上次修改时间   atime 文件被读取...

疯狂的小黑
2016/11/08
4
0

没有更多内容

加载失败,请刷新页面

加载更多

day99-20180926-英语流利阅读-待学习

换汤不换药的美容大忽悠:从抗衰老到肌肤焕发新生 Lala 2018-09-26 1.今日导读 说到护肤品,一个个大牌广告就浮现在我们眼前:皮肤吹弹可破的女明星手捧功能各异的瓶瓶罐罐,暗示着消费者买买...

飞鱼说编程
35分钟前
3
0
FFmpeg Maintainer赵军:FFmpeg关键组件与硬件加速

大家好!我是赵军,现就职于英特尔的DCG从事基于FFmpeg的硬件优化工作,两年多前加入FFmpeg社区,2018年4月成为FFmpeg的其中的一个FFmpeg Maintainer,主要负责FFmpeg的硬件优化工作。 概览:...

yizhichao
今天
1
0
ehlib 修改 使行号字体颜色 与标题字体颜色 一致

对ehlib 显示效果不够满意,而做的调整 修改这个过程:procedure TCustomDBGridEh.DrawIndicatorCell(ACol, ARow: Longint; AreaCol, AreaRow: Longint; ARect: TRect; AState: TGri......

vga
今天
1
0
Bash重定向详解

Bash重定向详解 Bash的重定向指的是将命令的输入和输出导向不同地方,而不是默认的标准输入、标准输出和标准错误。Bash的重定向实际上是对标准输入、标准输出和标准错误的重置,进而将所需输...

小陶小陶
今天
3
0
EventBus原理深度解析

一、问题描述 在工作中,经常会遇见使用异步的方式来发送事件,或者触发另外一个动作:经常用到的框架是MQ(分布式方式通知)。如果是同一个jvm里面通知的话,就可以使用EventBus。由于Event...

yangjianzhou
今天
59
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部