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

二进制操作最右侧位

xjtudll13年前 (2013-09-25)技术心得9910

   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/

标签: 算法
分享给朋友:

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

C# 动态加载DLL 通过反射 调用参数、方法、窗体

.net中常会用到动态加载DLL,而DLL中可能包含各种参数、方法、窗体,如何来调用动态加载这些参数、方法、窗体呢? 在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系: System.Reflection命名空间 (1)   AppDomain:应用程序域,可以将...

苹果电脑备份还原Windows操作系统

苹果电脑备份还原Windows操作系统

苹果电脑可以通过BootCamp安装Windows系统(毕竟,有很多“Just For Windows”和“IE Only”的软件和服务--比如国内的网上银行)。但是,苹果电脑的macOSX操作系统及其下的文件可以通过Time Machine备份、还原,通过BootCamp装的Windows系统及其...

Xcode:如何在plist中换行

参考资料:http://91r.net/ask/2035567.html 问题: 如何在plist中换行,尝试在末尾加入\n发现无效 解决办法: 1、自编代码将"\n"替换为"\\n" NSString *newString = [oldString stri...

Quartus CPLD未使用引脚处理

Quartus CPLD未使用引脚处理

未使用的引脚可以设置成输出,三态输入,弱上拉输入等。Quartus 8.0默认设置成输出低电平(As output driving ground)。 引脚设置方法: 【Assignments】->【Setting】->【Device】->【Device and Pin Option...

PowerPCB5.01安装

PowerPCB5.01安装

软件下载地址:http://www.mcu123.com/news/Soft/embsof/pcb/200609/104.html我目前就是用的这个,暂时没发现什么问题。1、安装时选择“Node-locked with FLEXid Key(teal)”  ...

ESD及静电的特点

什么是ESD ESD是代表英文Electrostatic Discharge[1] 即“静电放电”的意思。ESD是本世纪中期以来形成的以研究静电的产生与衰减、静电放电模型、静电放电效应如电流热(火花)效应(如静电引起的着火与爆炸)和电磁效应(如电磁干扰)等的学科。近年来随着科学技术的飞速发展、微电...

发表评论

访客

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