当前位置:首页 > 技术心得 > 正文内容

二进制操作最右侧位

xjtudll11年前 (2013-09-25)技术心得4320

   1  将最右侧的1变成0(可利用判断是不是2的幂) 

下面这个公式可以将一个数x的最右侧1变成0,如果没有1,则生成的所有位都是0

x &x-1

例如:0101 1000 B -----> 0101 0000 B

这个公式还可以用来检测该数是不是2的幂,如果一个数是2的幂,那么必然满足:

x &x-1 = 0

比较常见的应用就是:判断是否只有有个按键按下。

同样的道理,也可以用类似的办法来判断一个数是不是2n-1

x&x+1 = 0

  2 传播最右侧位 

利用以下公式可以传播最右侧的1,如果为 0,则生成的是1

x | (x-1)

例如:0101 1000 B -----> 0101 1111 B 

  将最右侧0变成1 

利用以下公式可以将最右侧0变成1,如果没有0,则生成的所有位都是1

x | (x+1)

例如:1010 0111 B -----> 1010 1111 B

扫描二维码推送至手机访问。

版权声明:本文由鸟的天空发布,如需转载请注明出处。

本文链接:http://www.xjtudll.cn/Exp/284/

标签: 算法
分享给朋友:

“二进制操作最右侧位” 的相关文章

金蝶K3 怎么实现一个物品 对应多个供应商

金蝶K3 怎么实现一个物品 对应多个供应商

在基础资料里面的采购管理这一块,可以设定每个供应商供应的产品,而且每个供应商的产品可以重复。 虽然会有提示,确定就是了 没问题的...

晶振的等效电路(转载)

晶振的等效电路(转载)

http://blog.sina.com.cn/s/blog_a20257d80102w7y4.html 1 晶振的等效电气特性 (1) 概念 [1] 晶片,石英晶体或晶体、晶振、石英晶体谐振器 从一块石英晶体上按一定方位角切下薄片。 [2] 晶体振荡器 在封装内部添加IC组成振荡电路的晶...

Multisim几则使用技巧

Multisim几则使用技巧

  Multisim是加拿大图像交互技术公司(Interactive Image Technoligics简称IIT公司)推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。 这两天...

Android的Service中弹出窗口解决方法

参考资料: http://www.cnblogs.com/fbsk/archive/2011/12/28/2304523.html http://blog.csdn.net/djun100/article/details/23756681 问题: 我们在使用Service时,经常会碰到这样的情况,比...

Protel99SE PCB各层的含义

本文收集于网络,整理而成,原文作者未知。 我们在进行印制电路板设计前,第一步就是要选择适用的工作层。Protel 99 SE提供有多种类型的工作层。只有在了解了这些工作层的功能之后,才能准确、可靠地进行印制电路板的设计。 Protel 99 SE所提供的工作层大致可以分为7类:Signal La...

vc改变进度条颜色及去掉进度条边框

参考资料:http://blog.csdn.net/athemon/archive/2009/06/03/4238200.aspx 1、改变进度条颜色 SendMessage这个函数 代码如下:       m_Progress1.SendMessa...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。