当前位置:网站首页>统计二进制中1的个数,两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
统计二进制中1的个数,两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
2022-08-02 14:33:00 【p29949】
1.将数字逻辑右移i位并按位与1
如:10的二进制表示为(000…000)1010(此处省略前28位0,后同),当i=0时,逻辑右移0位,1010&0001 结果为0,count=0;当i=1时,逻辑右移1位,0101&0001 结果为1,count=1;当i=2时,逻辑右移2位,0010&0001 结果为0,count=1;当i=3时,逻辑右移3位,0001&0001 结果为1,count=2…一直循环到i=31结束。
#include <stdio.h>
int Bits(unsigned int n)
{
int num = 0;
for (int i = 0; i < 32; i++) {
if ((n >> i & 1) == 1)//将数字逻辑右移i位,&按位与
{
num++;
}
}
return num;
}
int main()
{
int i = 0;
int count = 0;
scanf("%d", &i);
count =Bits(i);
printf("%d二进制中1的个数为%d\n", i, count);
return 0;
}2. m = m & (m - 1);
int count_bit(int m)
{
int count = 0;
while (m)
{
m = m & (m - 1);
count++;
}
return count;
}
//n=11
//n = n&(n-1) 实现几次,里面就有几个1
//1011 - n
//1010 - n-1
//1010 - n
//1001 - n-1
//1000 - n
//0111 - n-1 3次3个1
//0000 - n
//两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
利用位操作中的“异或”。异或的特征:相同为0.相异为1。先利用两个数进行“异或”操作,得到一个值k,然后问题就演变成了数出这个值k中1的个数,与上一题一样的方法。
#include <stdio.h>
int Bits(unsigned int n)
{
int num = 0;
for (int i = 0; i < 32; i++) {
if ((n >> i & 1) == 1)//将数字逻辑右移i位,&按位与
{
num++;
}
}
return num;
}
int main()
{
int i = 0;
int j = 0;
int k = 0;
int count = 0;
scanf("%d %d", &i,&j);
k= i ^ j;
count = Bits(k);
printf("二进制中有%d个位(bit)不同\n",count);
return 0;
}边栏推荐
猜你喜欢
随机推荐
只出现一次的数字||| —— 哈希映射、异或位运算+分治思想
js电梯导航基础案例
NXP i.MX 8M Mini工业核心板B2B版本,4核ARM [email protected]设计
为什么四个字节的float表示的范围比八个字节的long要广?
面试了个阿里P7大佬,他让我见识到什么才是“精通高并发与调优”
lambda表达式、Stream接口及Optional类
MySQL 的几种碎片整理方案总结(解决delete大量数据后空间不释放的问题)
2022 Low Voltage Electrician Exam Questions and Online Mock Exam
IPtables 和binlog
如何使用Swiper外部插件写一个轮播图
PAT tree DP (memory search) class a, 1079, 1090, 1106
XGBoost 和随机森林在表格数据上优于深度学习?
VsCode更新后,怎么使用使用快捷键同时生成多个元素
Impulse response invariant method and bilinear transformation method for IIR filter design
【Untitled】
软件代码签名证书怎么申请
【无标题】
static关键字的三种重要作用详解
5000mAh大电池!华为全新鸿蒙手机今晚亮相:更流畅更安全
加载事件的用法









