按位与&的巧算:《统计二进制中1的个数》《求两个数二进制中不同位的个数》
2023-12-21 22:03:01
统计二进制中1的个数
#include<stdio.h>
int count_num_of_1(int n) {
int count = 0;
while (n) {
n = n & (n - 1);
count++;
}
return count;
}
int main() {
int num = 0;
scanf("%d", &num);
int n = count_num_of_1(num);
printf("%d\n", n);
return 0;
//n&(n-1)==0这个条件也可以验证是否是2的几次方:10 100 1000 ......
按位与是一个很好的算法思路:按位与1可以拆出各个二进制位;n与n-1按位与,则可以拆出含1的个数。
这是通常的简单拆解法:
int count_num_of_1(int n) {
int count = 0;
while (n) {
if (n % 2 == 1)
count++;
n /= 2;
}
return count;
}
求两个数二进制中不同位的个数
int count_differ_bit(int m, int n) {
int i;
int count = 0;
for (i = 0; i < 32; i++) {
if (((m >> i) & 1) != ((n >> i) & 1)) //向右移动i位,按位与1
count++;
return count;
}
}
int main() {
int m = 0, n = 0;
scanf("%d %d", &m, &n);
int ret = count_differ_bit(m, n);
printf("%d\n", ret);
}
文章来源:https://blog.csdn.net/etamaos/article/details/135128673
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!