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

二进制操作最右侧位

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

   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 

  3  将最右侧0变成1 

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

x | (x+1)

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

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

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

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

标签: 算法
分享给朋友:

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

Multisim导入MOSFET模型

文章来源:NI官网->在Multisim里导入MOSFET 模型 原文网址:http://digital.ni.com/public.nsf/allkb/E1DA418DD7A5E4A1862574B800219513 问题: 如何在Multisim器件里导入以“.MODEL&rd...

BOS自定义单据对应模块后台查找

bos数据大量更改新增之后,会出现数据存放位置忘记的情况,下面为单据及单据转换后台查询对应模块的语句,如有需要可参考查询--自定义单据忘记存放在哪个模块可使用以下语句进行查询SELECT it.FID,it.FFunctionID as FSubSysID,it.FNa...

Altium Designer:将Sch.Lib和Pcb.Lib库文件整合成.intlib库文件

Altium Designer:将Sch.Lib和Pcb.Lib库文件整合成.intlib库文件

参考资料: http://www.51hei.com/bbs/dpj-39220-1.html 每个.intlib (integrated library) 需包含 .pcblib (建封装) 和 .schlib (路线图) 两个文件。 (1) 创建 .intlib (file ->...

因iPhone X上架杯具

最近上架了两款app,均被拒绝。 以下是原文:  0. 10.0 Before You Submit: Program License Agreement PLA 2.3 Your app or its metadata contains references to a pre-...

MSP430如何得知程序代码的大小

MSP430如何得知程序代码的大小

用过Keil编译C51程序的兄弟们都知道,Keil在编译程序之后,会有一段message提示用户程序占用的RAM和ROM。而用IAR编译MSP430程序的时候,却没有任何关于程序大小的信息。一直以来,我都以为IAR无此功能,后来才发现是编译器设置的问题,编译器配置如下: Tools->Opt...

MDI程序中MenuStip控件的MDIWindowListItem

MDI程序中MenuStip控件的MDIWindowListItem

要求: 在主窗体中的“Windows”菜单里,能够显示所有已经打开的子窗体Title,并且点击后能够把相应窗体激活到最前面。 .net 2.0中,在MenuStip控件中提供了MDIWindowListItem属性。只要把想要显示子窗口列表的menu控件设置上就Ok了。...

发表评论

访客

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