求一个数二进制表示下1的个数

 我来答
科创17
2022-07-08 · TA获得超过5923个赞
知道小有建树答主
回答量:2846
采纳率:100%
帮助的人:178万
展开全部

给你一个整数a,数出a在二进制表示下1的个数,并输出

对于一个二进制整数,将它减一和它本身相与,会把这个整数最右边的1变为零。

举例说明,比如 这个数字是9
第一步:
9的二进制表示为 0000 1001
8的二进制表示为 0000 1000
8和9相与的结果二进制表示为 0000 0001 ,表示的数字为 1
第二步:
让 1在和 0相与
1的二进制表示为 0000 0001
0的二进制表示为 0000 0000
相与的结果为 0000 0000 表示的数字为0

我们发现,9的二进制形式里面有2个1,正好相与了两次结果变成了0。因此得出结论:一个数的二进制形式中1的个数等于 将这个数和这个数减一的值相与,将相与的到的数作为新的数,接着和其减一相与,知道结果变为0,中间的相与的次数。

负数我们在计算时使用了他的补码进行计算,将最高位的符号位取反就可以获得补码,通常我们采用和0xFFFFFFFF相与来得到。这样得到了一个32位的二进制数据。
例:
这里以 -9为例
-9的 原码为 10010000
-9和0xFFFFFFFF相与的结果为 1111 1111 0110 1111
发现 补码中0的个数正好就是原来数的二进制形式的1的个数,所以负数的二进制形式的1的个数就是(32 - 补码中1的个数)

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式