求二进制数中有多少个1
Posted 邓文丰的个人博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求二进制数中有多少个1相关的知识,希望对你有一定的参考价值。
求一个 n 位的整数的二进制表式中有x个 1。
样例:给定 32 (100000),返回 1;给定 5 (101),返回 2;给定 1023 (111111111),返回 9
解决方法:num & (num-1) 可以每次将最右边的1消去,经过x次运算即可。
原理:分类讨论、归纳总结
int countBit(int num){
int count = 0;
while(num != 0){
num = num & (num-1);
count++;
}
return count;
}
判断一个数的二进制数里面1的个数的奇偶性,偶数返回0,奇数返回1。
- 样例:给定 32 (100000),返回 1;给定 5 (101),返回 0;给定 1023 (111111111),返回 1
- 异或运算有如下规律,加上异或表判断即可。
- a^b = b^a
- a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
- d = a ^ b ^ c 可以推出 a = d ^ b ^ c
- a^b^a = b
C语言代码如下(关注点在val最低位的变化)
int odd(int x){
int val = 0;
while(x){
val ^= x;
x >>= 1;
}
return val & 0x1;
}
以上是关于求二进制数中有多少个1的主要内容,如果未能解决你的问题,请参考以下文章