天天看点

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;

}

继续阅读