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

二进制操作最右侧位

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

   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/

标签: 算法
分享给朋友:

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

Multisim交流分析显示光标值

Multisim交流分析显示光标值

multisim的交流分析本质是交流扫描分析,即扫描频率,输出节点电压等参量。 在分析窗口中设置输出变量,在频率参数标签中设置频率参数(起始频率、结束频率等) 这是默认的交流分析的结果图 是没有标注任何数值的。要是想知道扫描点的相关数值,必须开光标。 右键,选择【显示光标】 拖动光标(图中...

android禁止屏幕自动锁屏(或背光自动灭)

  Android开发过程中,一些程序在运行时,不希望手机自动锁屏,即保持系统的背景灯常亮,以防止程序执行时出现异常,实现起来很简单,只需要在创建Activity时,在onCreate()方法中,加入如下语句即可。   getWindow().addFlags(WindowMan...

蓝牙4.0手表功能简析

蓝牙4.0手表功能简析

蓝牙手表可以分为两大类:(1)蓝牙为手表的主要功能,脱离了蓝牙,手表将只有时间相关功能。这类手表主要是作为配件使用;(2)手表本身具有强大的功能,蓝牙只是锦上添花。例如Pebble,I’m Watch,SonySmart Watch等等。此次分析的是第一类产品——...

Windows Live Writer:Object moved问题解决

用Windows Live Writer已经有很长时间了,可以方便的从Word里面拷贝文章,再也不用理会博客后台那蜗牛般的速度了。这就是Windows Live Writer强大的地方。 今天用Windows Live Writer更新博客时,突然提示: Found: Object moved...

php Undefined index和Undefined variable的解决方法

参考资料:http://www.jb51.net/article/13974.htm 问题: 上传一个PHP网站到服务器,提示: PHP Notice: Undefined index: user in C:\inetpub\wwwroot\xonixwatch.com\manager\index....

LCD制作参数

1 、Display Type显示类型 TN 、HTN 、STN 、FSTN 等 显示类型对产品的价格影响最大,通常由显示像索的数量及产品的档次而定 TN 、HTN 、LCD 、COG 是什么? TN叫什么扭曲型LCD , HTN是比TN 宽视角的,上下各宽15度视角的,弥补TN 的一些不足,比他们...

发表评论

访客

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