C语言之求int型数值二进制中1的个数

int型数值占内存4个字节,就是4 * 8 = 32个字符。如果二进制每一位上都判断是否为1的话,最多需要32次来判断。
还有两个比较重要的符号需要了解:
(1)& 位运算符
是把两个不同操作数内相同位置的位关联起来的AND(和),相同位置的值都是1则运算结果该位还是1,一旦有一个是0或两个都是0,则位运算的结果该位都是0。

(2)>> << 移位运算符
移位运算符将左操作数的二进制向左/右移动数个位置,至于移动几个位置,由右操作数指定。移位数值与移动位数都要求是整数。

>> 向右移位a>>b ,a数值的每个位向右移动b个位
<< 向左移位a>>b ,a数值的每个位向左移动b个位

两种运算举例:

int a =70x00000111
int b =10x00000001
a & b0x00000001
a>>b0x00000011
a<<b0x00001110

上面实例中可以看出,a&b的结果就是0x00000001,十进制就是1。根据这个原理,二进制数值有多少个1,就可以将每一位移位到低位,然后分别与0x00000001进行位运算,位运算结果是1,则二进制就是1,反之是0;移位运算中,向左移位后面补0,向右移位则前面补0。

有了以上的基础就可以求int型数值二进制中1的个数了。

#include<stdio.h>

int main()
{
int a = 0xf;//0xf的二进制是1111,尝试用代码来数出有多少个1
int count = 0;//统计1的个数
int i = 0;//while循环次数

while(i < 32)//i用来限制while的循环次数,最多有32次需要判断是否为1,又因为i = 0,所以i<32
	{
	if (a & 0x01)//位运算符,如果为真,即为1,则count加1
	{
	count ++;
    }
	a = a >> 1;//移位
	i++;
}
printf("%d\n",count);
}

执行结果:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值