C语言实现返回一个数的二进制中的1的个数

xiaoxiao2025-11-13  6

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

 方法一:

    解题思路:1> 在32位操作系统下一个数字占四个字节,每个字节八比特位,因此一个数

                           占32个比特位,根据这个可以采用循环判断二进制中1的个数;

                      2> 我采用让1循环依次逻辑左移一位与想要检测的数字按位与,判断与结果,

                           符合count++;

                      3> 循环完成之后输出结果。(缺点:不能判断检测数中的长度,只能等待变量

                           i 循环完成)

  源代码:

#include<stdio.h> #include<stdlib.h> //写一个函数返回参数二进制中 1 的个数 ,比如: 15 0000 1111 4 个 1 //程序原型: //int count_one_bits(unsigned int value) //{ // // 返回 1的位数 //} int count_one_bits(unsigned int value) { int count = 0; for (int i = 0; i < 32; i++) { if (value & (1 << i))//if((value >> i) & 1) { count++; } } return count; } int main() { printf("%d\n", count_one_bits(15)); system("pause"); return 0; }

  运行结果:

                                          

  方法二:

           主要修改内容:1> for循环,通过判断value的值是否为0,然后value的二进制位逻辑

                                    右移一位,直到value的值为0循环结束;

                                    2> if语句只需与1按位与就可以。

  源代码:

#include<stdio.h> #include<stdlib.h> //写一个函数返回参数二进制中 1 的个数 ,比如: 15 0000 1111 4 个 1 //程序原型: //int count_one_bits(unsigned int value) //{ // // 返回 1的位数 //} int count_one_bits(unsigned int value) { int count = 0; for (; value != 0; value >>= 1) { if (value & 1) { count++; } } return count; } int main() { printf("%d\n", count_one_bits(15)); system("pause"); return 0; }

  运行结果:

                                 

无奋斗,不青春!      加油!青年!

 

转载请注明原文地址: https://www.6miu.com/read-5039557.html

最新回复(0)