博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个整数的二进制表示中1的个数
阅读量:6654 次
发布时间:2019-06-25

本文共 402 字,大约阅读时间需要 1 分钟。

一种思路是如果一个整数不为0,那么这个整数至少有一位是1(二进制表示)。如果我们把这个整数减去1,那么原来处在整数最右边的1就会变成0,原来在1后面的所有的0都会变成1。其余的所有位将不受到影响。

举个例子:一个二进制数1100,从右边数起的第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成1,而前面的1保持不变,因此得到结果是1011。

我们发现减1的结果是把从最右边一个1开始的所有位都取反了。这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000。也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0。那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。

转载于:https://www.cnblogs.com/cugb-2013/p/3618068.html

你可能感兴趣的文章
十八个常用的Powerpoint演示技巧汇总【转载】
查看>>
提高设计水平的35个有用的Photoshop样式下载
查看>>
C++中public,protected,private访问
查看>>
Ajax简介
查看>>
XPath语法
查看>>
ecshop首页增加倒计时列表
查看>>
编译器错误:CS0426 .
查看>>
通用图表解决方案-10个信息化的精美Flash组件推荐
查看>>
Xcode/iOS 5 开发定位服务的App
查看>>
Java Swing 组件大全实例演示
查看>>
asterisk常用调试监测命令
查看>>
子用户-角色-权限-菜单 浅谈:子账户设计方案
查看>>
无服务器端的UDP群聊功能剖析(重构版本)
查看>>
Linux进程间通信之信号量(semaphore)、消息队列(Message Queue)和共享内存(Share Memory)...
查看>>
对象失去焦点时自己动提交数据 V2
查看>>
Silverlight/Windows8/WPF/WP7/HTML5周学习导读(10月22日-10月28日)
查看>>
ESX启动故障排除一“Cannot open the disk ‘XXXXXX.vmdk’ or one of the snapshot disks it depends on.”...
查看>>
FileBytes写成文件并存档
查看>>
Metro App中关于挂起与恢复的操作
查看>>
Stani's Python Editor下载
查看>>