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

二进制操作最右侧位

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

   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://xjtudll.cn/Exp/284/

标签: 算法
分享给朋友:

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

windows xp系统添加凭据操作方法

windows xp系统添加凭据操作方法

Windows XP操作系统中打开“运行”,输入“ control keymgr.dll”回车,即可打开“存储用户名和密码”窗口,单击“高级”选项卡,然后单击“管理密码”,添加服务器的IP地址、用户和密码,确认退出后,重启电脑。...

Keil  error C272: '__asm' requires src-control to be active 解决办法

Keil error C272: '__asm' requires src-control to be active 解决办法

问题: 在C代码里加入了__asm语句,例如“__asm POP 7”,编译出现Error error C272: '__asm' requires src-control to be active 解决办法: 右键选中该文件----option for file"...

IAR显示行号

IAR显示行号

个人比较习惯用外部编辑器来编辑程序,但是调试工具还是得用IAR,有时候要找到某一行程序,就必须知道行号。 Tools-> Option -> Editor -> Show line numbers(勾选)...

Proteus error:

Proteus error:"probe object xxx is ambigously placed"

Proteus仿真时,在添加电流探针以后,提示error "probe object xxx is ambigously placed" 如图所示: 原因: 电流探针仿真的时候那个电流的符号要和导线的方向一致 出现问题就是因为这个 解决办法: 改变电流探针方向,使之与导线方向...

SQL Server配置网络路径

远程数据库服务器名:ChenCunServer @@servername:ChenCunServer 现在需要在此机上新建发布。在第三步中,指定快照文件夹。默认是:D:\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\ReplData...

Xcode Error:loaded some nib but the view outlet was not set解决

Xcode Error:loaded some nib but the view outlet was not set解决

当使用 initWithNibName 函数, 并使用由nib文件生成的ViewController 的view属性时候,遇到这个问题。 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException'...

发表评论

访客

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