求二进制中1 的个数
2016-07-02 20:14
239 查看
问题描述:
实现一个函数,输入一个整数,求这个整数的二进制中1的个数。
方法1
每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。
//缺点负数重1的个数不能求出,会陷入死循环
方法二:
方法三、
方法四、
原理:把一个整数减去一,再和原来的整数做与运算会把这个整数最右边的一个一变成0.
实现一个函数,输入一个整数,求这个整数的二进制中1的个数。
方法1
每次让最右边的以为& 1,然后将这个数右移一位,当这个数为0的时候停止。
//缺点负数重1的个数不能求出,会陷入死循环
int NumOf1(int x) { int count = 0; while (x) { if (x & 1 == 1) { count++; } x >>= 1; //运算效率比除高 } return count; }
方法二:
//缺点:需要循环32次但可以找出负数中1的个数 int NumOf1(int x) { int count = 0; int i = 0; while (i<32) { if (x & 1 == 1) { count++; } x >>= 1; //运算效率比除高 i++; } return count; }
方法三、
//缺点:需要循环32次但可以找出负数中1的个数 int NumOf1(int x) { int count = 0; int i = 0; int flag = 1; while (flag) { if (x & flag) { count++; } flag <<=1; } return count; }
方法四、
原理:把一个整数减去一,再和原来的整数做与运算会把这个整数最右边的一个一变成0.
int NumOf1(int x) { int count = 0; while (x) { count++; x &= (x - 1); } return count; }
相关文章推荐
- 二进制中1的个数
- 给定一个正整数N计算从1到N中1出现的个数
- Leetcode Q191:Number of 1 Bits
- 求1到n中1的个数
- 1的个数 NYOJ 100
- 求二进制数中"1"的个数
- 剑指Offer 二进制中的1的个数
- 腾讯面试中一道算法题:一个数N 的2进制表现形式中1的个数
- 【剑指Offer面试编程题】题目1373:整数中1出现的次数--九度OJ
- 面试题32:从1到n整数中1出现的次数
- 《编程之美》 求二进制数中1的个数
- 算法 - 求一个正整数的二进制表示中1的个数(C++)
- 求出sum=1+11+111+1111+ .... + 111...111(1024个1),sum有多少个1
- C语言快速统计其二进制形式中1的个数
- 南阳oj 题目100 1的个数
- 编程之美-求二进制数中1的个数方法整理
- 程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
- 输入整数n,计算从1到n这n个整数的十进制表示中1出现的次数和
- 求一个自然数的二进制中1的个数
- 计算整形数中1的个数