1. 写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1

题目:
写一个函数返回参数二进制中 1 的个数 
比如: 15 0000 1111 4 个 1 
程序原型: 
int count_one_bits(unsigned int value) 

// 返回 1的位数 

题目解析:整型int 在内存单元中所占用的内存为4字节即32比特位,要判断一个2进制数有多少个位数为1,则需要判断32次,首先可构建出一个for循环来实现这一过程。其次,如何判断当前位置的数字是不是1,这里需要用到位运算符 &(按位与),即相同为1,相异为0;而这个运算符是作用于当前位,如何使之与整型数的32位依次比较,可以用 <<(左移) 和 >>(右移)来实现。每当循环次数+1;让1左移一位,与目标数当前位置的数进行比较,如果比较值不等于0,则计数器+1;如果比较值等于0,则跳过,继续进行下次循环,直到比较完所有的32位,输出计数器的值即可。

代码如下:(运行环境为vs2013)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int count_one_bits(unsigned int value)
{
    int count = 0;      //   计数器
    for (int i = 0; i < 32; i++){
        if ((value & (1 << i)) != 0){
            count++;
        }
    }
    return count;
    // 返回 1的位数 
}

int main(){
    int temp;
    printf("请输入一个整数:\n");
    scanf("%d", &temp);
    printf("这个整数的二进制序列中有%2d个1!\n", count_one_bits(temp));
    system("pause");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lin140611/article/details/88887375