计算一个整数二进制位中1的个数
2017-07-20 22:22
267 查看
计算一个整数二进制位中1的个数。
注:上面移位相当于除以2,但是移位更高效。
上面的一个问题:如果参数为int类型的话,输入负数的话,可能引起死循环,负数右移一位的话,要保证该数为负数,所以最高位会设置为1,如果一直做右移运算的话,最终这个数字会变成0XFFFFFFF而陷入死循环。
解决可能的死循环 可以让1左移,计算二进制。
清除最右边的1,就 n=n&(n-1)
普通法
这种方法是每个人都能想出来的,最直观的方法,移位+计数。int BitCount(unsigned int n) { size_t c =0 ; // 计数器 while (n >0) { if((n &1) ==1) // 当前位是1 ++c ; // 计数器加1 n >>=1 ; // 移位 } return c ; }
注:上面移位相当于除以2,但是移位更高效。
上面的一个问题:如果参数为int类型的话,输入负数的话,可能引起死循环,负数右移一位的话,要保证该数为负数,所以最高位会设置为1,如果一直做右移运算的话,最终这个数字会变成0XFFFFFFF而陷入死循环。
解决可能的死循环 可以让1左移,计算二进制。
位运算方法
不断清除该数最右边的1,同时累加计数器。清除最右边的1,就 n=n&(n-1)
int Numberof1(int n) { int count = 0; while(n) { n = n&(n-1); ++count; } return count; }
相关文章推荐
- 计算1个数--计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
- 计算一个整数二进制位中1的个数
- 剑指offer 10----计算一个整数二进制位中1的个数
- 计算一个整数二进制位中1的个数
- 17_7_20:计算一个整数二进制位中1的个数。
- C/计算一个整数二进制位中1的个数
- 元素出栈、入栈顺序的合法性/计算一个整数二进制位中1的个数。
- 计算一个整数二进制位中1的个数
- 计算一个整数二进制位中1的个数。要求效率尽可能的高。且能正确求正数和负数的二进制中1的个数。
- 计算一个整数二进制位中1的个数
- day08之元素出栈、入栈顺序的合法性+计算一个整数二进制位中1的个数
- 作业三-应用分支与循环结构解决问题——.输入一个整数 x,计算并输出下列分段函数 sign(x) 的值
- ZT 计算一个无符整数中1Bit的个数(1) 2010-04-20 10:52:48
- 黑马程序员之C#编程基础学习笔记:计算一个整数数组的所有元素的和。
- 计算一个无符整数中1Bit的个数(1)
- 这个问题要求你写一个程序来计算的确切价值Rnwhere R是一个实数(0.0 < R < 99.999)和n是一个整数,0 < n < = 25。
- 请设计一个算法,计算n的阶乘有多少个尾随零。 给定一个int n,请返回n的阶乘的尾零个数。保证n为正整数
- 输入一个整数,计算各个数字之和!
- 给定一个十进制的整数,写下从1开始到N的所有整数,计算其中出现的所有"1"的个数
- 计算一个整数中1的个数...