三种方法写一个函数返回二进制中1的个数
程序员文章站
2022-07-15 09:57:23
...
1.写一个函数返回二进制中1的个数
方法一:n与n-1按位与
例如:15:0000 1111
15-1:0000 1110 &–>00001110
这样做n&n-1直到n==0时共做了多少次即为这个数中1的个数。
代码如下:
int count_one_bits(unsigned int n){
int count = 0;
while (n){
n &= n - 1;
count++;
}
return count;
}
方法二:十进制转换为二进制采用了模二取余的方法,记录每次产生的余数,若是1,count++
代码如下:
int count_one_bits(unsigned int n){
int count = 0;
int x = 0;
while (n){
x = n % 2;
n >>= 1;
if (x % 2 == 1){
count++;
}
}
return count;
}
方法三:
判断二进制中每一位的值是否为1可以做这样的运算:
(n & 1) == 1;若为1;则count++;
整数在内存中为32个比特位,则采用i循环32次,判断每一位的值是否为1即可;
代码如下:
int count_one_bits(unsigned int n){ //方法3
int i = 0;
int count = 0;
for (i = 1; i != 0; i <<= 1){
//判断每一位的值是否为1
if ((n & 1) == 1){
count++;
}
//右移准备判断下一位的值
n >>= 1;
return count;
}
}
int main(){
unsigned int a = 0;
scanf("%u", &a);
printf("二进制中1的个数为:%d\n", count_one_bits(a));
return 0;
}
上一篇: Spring Cloud Config获取配置信息
下一篇: 二进制相关