- 写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
思路一:求模,不断移位判断数字奇偶来确定二进制代码中1的个数,但是这种方式如果不使用unsigned就无法判定负数二进制代码中的1的个数,因为负数的符号位是1,会被自动判断为一个很大的数
思路二:按位与判断,这种方式就不会有思路一的问题,通过数字二进制每一位与1相与,结果不为0则计数,最后得出1的个数,(这种方法是通过将1右移,所以每一位相与的结果只有0或非0而不是0或1);或直接将数字左移,每一位与1相与,再记录1的个数.
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
//方法二:按位与操作计数
int BitOneCount(int num){
int count = 0;
for (int i = 0; i < 32; i++){
//0-31,所以是i<32
if ((num&(1 << i) )!= 0){
++count;
}
}return count;
}
//方法一:求模,不断移位判断数字奇偶来确定二进制代码中1的个数
int count_one_bits(unsigned int value) {
int count = 0;
while (