求一个整数存储在内存中的二进制中的1的个数
程序员文章站
2022-07-15 09:50:17
...
1.除2取余法
#include<stdio.h>
int main()
{
int num = 10;//0000 0000 0000 0000 0000 0000 0000 1010
int count = 0;//计数
while (num)
{
//整数除二取余就是对应的二进制数的值
if (num % 2 == 1)
{
count++;
}
num = num / 2;
}
printf("整数对应的二进制1的个数=%d\n", count);
return 0;
}
2.右移按位与1法
#include<stdio.h>
int main()
{
int num = -1;//带符号数计算机中补码存在 -1补码:1111 1111 1111 1111 1111 1111 11111 1111 带符号数算术右移
int count = 0;
for (int i = 0; i < 32; i++)
{
if (((num >> i) & 1) == 1)
{
count++;
}
}
printf("二进制中1的个数=%d", count);
return 0;
}
3.减1互按位与法
#include<stdio.h>
int main()
{
int num = 10;
int count = 0;
while (num)
{
count++;
/*
看两个例子
num=-1
num 1111 1111 1111 1111 1111 1111 1111 1111
num-1 1111 1111 1111 1111 1111 1111 1111 1110
&
num 1111 1111 1111 1111 1111 1111 1111 1110
num-1 1111 1111 1111 1111 1111 1111 1111 1101
&
num 1111 1111 1111 1111 1111 1111 1111 1100
num=10
num 0000 0000 0000 0000 0000 0000 0000 1010
num-1 0000 0000 0000 0000 0000 0000 0000 1001
&
num 0000 0000 0000 0000 0000 0000 0000 1000
num-1 0000 0000 0000 0000 0000 0000 0000 0111
&
num 0000 0000 0000 0000 0000 0000 0000 0000
num&(num-1)就是为了依次把是1的二进制位置0,直至num为0
*/
num = num&(num - 1);
}
printf("二进制中1的个数=%d\n", count);
return 0;
}
上一篇: 试题 算法训练 二进制数数
下一篇: 蓝桥杯 二进制数数 算法训练
推荐阅读
-
剑指offer11:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(进制转换,补码反码)
-
用C语言写一个函数返回参数二进制中1的个数
-
我们在删除SQL Sever某个数据库表中数据的时候,希望ID重新从1开始,而不是紧跟着最后一个ID开始需要的命令
-
[c语言]统计一个数二进制中的1的个数
-
LeetCode 1 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
-
1.无符号整数的二进制中1的个数2.十进制数转化为二进制数
-
写一个函数返回参数二进制中 1 的个数
-
写一个函数返回参数二进制中 1 的个数
-
写一个函数返回参数二进制中 1 的个数
-
写一个函数返回参数二进制中1的个数