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

二进制操作最右侧位

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

   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/

标签: 算法
分享给朋友:

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

Android Studio删除Module

Android Studio删除Module

Android studio添加了一个module,结果添加错了,要删除才行,搞了半天不知道怎么弄。研究了很久,才搞清楚。 1 首先右键你要删除的Module。 2 我们往下看找到open module settings 3 弹出如图示的窗口 4 接着我们点击那个“-”...

Multisim交流分析显示光标值

Multisim交流分析显示光标值

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

C# textBox框实现输入下拉列表

C# textBox框实现输入下拉列表

textBox框像百度搜索出现下拉列表的样式,如图: 重点就是要关注:AutoCompleteMode和AutoCompleteSource两种属性。 具体实现代码如下: 将此方法在frmLogin_Load事件里加载, private void bindTxt() {   ...

金蝶K3 引出序时簿提示:cannot update database of object is read only

金蝶K3 引出序时簿提示:cannot update database of object is read only

金蝶K3引出序时簿提示:cannot update database of object is read only 解决办法: 更换引出路径...

Xcode5 Version与Build设置

Xcode5 Version与Build设置

在ios中,有两种version,一种是 CFBundleVersion ("Bundle Version"),也就是我们看到的Version,另一种是CFBundleShortVersionString ("Bundle version string, short&q...

ios开发者帐号扣费成功 但是还是提示快到期??

ios开发者帐号扣费成功 但是还是提示快到期??

公司的ios开发者帐号快到期了,在apple developer(developer.apple.com),资料填写完毕后,按照提示,说可能要等24小时。 过了一段时间,信用卡收到了扣费通知,想着扣费成功了,帐号应该就是续费成功了,就没管了。加上那几天比较忙,就没去看邮件(gmail,访问太麻烦),...

发表评论

访客

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