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

本文介绍了两种C语言实现方法来计算一个无符号整数的二进制表示中1的个数。方法一是通过逻辑左移位和按位与操作,方法二是利用二进制右移操作,直到数值变为0。每种方法都包含解题思路、源代码和运行结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 //写一个函数返回参数二进制中 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;
}

  运行结果:

                                 

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值