前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言/计算整数二进制位中的1的个数

C语言/计算整数二进制位中的1的个数

作者头像
用户10788736
发布2023-10-16 08:28:17
5110
发布2023-10-16 08:28:17
举报
文章被收录于专栏:CSDN搬移文章

前言

在计算机中存储数据/信息/代码,是以二进制方式存储,所以我们为了更加了解计算机的运行方式,需要去了解一下关于计算二进制位中的1和0的个数的方法。

本文是关于C语言中计算整数二进制位中的1的个数的三个方法。

一、关于一个整数的二进制表示方法

整数包括:正整数、负整数、零。

在二进制表示中,正整数和零的原码,反码,补码是一致的;负整数的原码,反码,补码表示方法各不一样。

负整数的原码:将最高位取1,其他位按二进制方法取0和1;

              反码:将原码的符号位(最高位)不变,其他位按位取反(原本是1的取0,原本是0的取1);

              补码:在反码的基础上,进行加1,即可得到补码。

二、计算二进制中的1的方法

1.取余法

注意:本方法只能争对非负整数

将一个非负整数进行转变为计算机中存储的二进制,本质上就是对该非负整数,不断地对2整除和取余.

例:将10的二进制中的1的个数求出:

代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int a = 10;
	int count = 0;//二进制1的个数存储

	while (a)
	{
		//二进制里最后面那个数是1
		if (a % 2 != 0)
		{
			count++;
		}
		a /= 2;
	}

	printf("%d\n", count);
	return 0;
}

输出:

代码语言:javascript
复制
2

结果分析:        

10的二进制原码:         00000000000000000000000000001010

其中1的个数为2。

2.移位法

在C语言中,右移运算符(按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补符号位,即正数补零,负数补1)可以帮助我们完成计算二进制中的1的个数。

方法:先将一个整数进行与1按位与(&),判断结果为1还是0,如果是1则该二进制中1的个数加1,再右移1位;再将其进行按位与1,判断结果为1还是0,右移1位……直到该整数等于0或者已经循环判断32次。

例:将-1的二进制中的1的个数求出:

代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int a = -1;
	int count = 0;
	int i = 32;

	while (a&&i)
	{
		if ((a & 1) == 1)
		{
			count++;
		}
		a >>= 1;
		i--;
	}

	printf("%d\n", count);
	return 0;
}

输出:

代码语言:javascript
复制
32

结果分析:

-1在计算机中的存储方式为反码,它的反码是:11111111111111111111111111111111

其中1的个数为32。

3.高级计算法

例:将11的二进制中的1的个数求出:

代码:

代码语言:javascript
复制
#include<stdio.h>

int main()
{
	int a = 11;
	int count = 0;

	while (a)
	{
		count++;
		a &= (a - 1);
	}

	printf("%d\n", count);
	return 0;
}

输出结果:

代码语言:javascript
复制
3

结果分析:

11的二进制原码:00000000000000000000000000001011

其中1的个数为3

总结

以上就是今天的内容,本文仅仅简单介绍了 的三种方法,而第三种方法能使我们快速便捷地处理数据的二进制中的1的个数。

这篇博客如果对你有帮助,给博主一个免费的点赞以示鼓励,欢迎各位🔎点赞👍评论收藏⭐️,谢谢!!! 如果有什么疑问或不同的见解,欢迎评论区留言哦。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 一、关于一个整数的二进制表示方法
  • 二、计算二进制中的1的方法
    • 1.取余法
      • 2.移位法
        • 3.高级计算法
        • 总结
        相关产品与服务
        对象存储
        对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档