利用位运算得出N的2进制中有几个1
来源:互联网 发布:算法分析 知识总结 编辑:程序博客网 时间:2024/05/19 01:31
第一种:
211的二进制为11010011。
+---+---+---+---+---+---+---+---+
| 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | <---原数
+---+---+---+---+---+---+---+---+
| 1 0 | 0 1 | 0 0 | 1 0 | <---第一次运算后
+-------+-------+-------+-------+
| 0 0 1 1 | 0 0 1 0 | <---第二次运算后
+---------------+---------------+
| 0 0 0 0 0 1 0 1 | <---第三次运算后,得数为5
+-------------------------------+
整个程序是一个分治的思想。第一次我们把每相邻的两位加起来,得到每两位里1的个数,比如前两位10就表示原数的前 两位有2个1。第二次我们继续两两相加,10+01=11,00+10=10,得到的结果是00110010,它表示原数前4位有3个1,末4位有2个 1。最后一次我们把0011和0010加起来,得到的就是整个二进制中1的个数。程序中巧妙地使用取位和右移,比如第二行中$333333的二进制为 00110011001100....,用它和x做and运算就相当于以2为单位间隔取数。shr的作用就是让加法运算的相同数位对齐。
第二种方法:
while(x)
{
x = x & ( x - 1 );
count++;
}
S+10+起床 2014/4/18 17:54:32
就是每执行过一次 x & (x-1) 后,都会将x的二进制位中为1的最低位的值变为0,并记数加1。
{
x = x & ( x - 1 );
count++;
}
S+10+起床 2014/4/18 17:54:32
就是每执行过一次 x & (x-1) 后,都会将x的二进制位中为1的最低位的值变为0,并记数加1。
0 0
- 利用位运算得出N的2进制中有几个1
- 位运算n & (n-1)的妙用
- 位运算n&(n-1)的使用
- 位运算n & (n-1)的妙用
- n&(n-1)的妙用(强大的位运算)
- win8.1系统的UEFI模式下安装ubuntu 64位系统(N次实验总结得出)
- 位运算---计算整数的N次方
- 几个位运算
- 位运算 几个例子
- 几个位运算
- 位运算总结2:利用位运算实现加法
- n皇后 位运算
- 利用位运算判断整数的正负
- 利用位运算的模四算法
- 程序员面试(1):利用位运算完成两个整数的加法运算
- 利用位运算实现两个整数的加法运算
- VC++ 利用位运算实现两个整数的加法运算
- 利用位运算实现两个整数的加法运算
- Tomcat性能监控LambdaProbe
- 一个好的多核支持人员应必备的素质
- Eclipse中maven项目JDK配置报错红叉问题
- IOS 四种保存数据的方式
- ModifyLine.xml: Invalid file name: must contain only [a-z0-9_.]
- 利用位运算得出N的2进制中有几个1
- ORACLE查看权限
- 2014 ACM Regional hdu 5072 (同色三角形模型,容斥原理)
- Java 8新特性探究(一)通往lambda之路_语法篇
- vim+latex
- Java基础面试题——(3)
- servlet单实例多线程模式
- java 类继承 接口实现
- 深入使用C指针与回调函数