【C语言】第四十九题→计算在n的参数当中的补码有多少二进制当中的1

89 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情

🚩write in front🚩

🔎大家好,我是泽奀,希望你看完后。能对你有所帮助,不足请指正,共同学习交流🔎
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜34»总榜2005🏅
🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知**⚠
**📝个人主页-掘金 (juejin.cn)💬
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏-【C语言】Topic - 泽奀的专栏 - 掘金 (juejin.cn)🎓
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

前言

今天开始学习C语言的第四十九题的练习,距离一百题还差将近一半。persist in🔥🔥🔥

题目描述

计算在n的参数当中的补码有多少二进制当中的1

题目分析

这道题目:比较考察你的逻辑思维能力实际上也就是操作符的一个使用了。(解题关键🔥)

计算在n的参数当中的补码有多少二进制当中的1,也就是当我们输入的时候进行输入数字的时候,它能够计算我们当中补码的数字的1。我们以输入整形类型的数字为例,在做这道题的我们必须要知道原码、反码、补码它到底是什么才行(^∀^●)ノシ

原码→直接将数字按照正数或者负数形式来转换翻译成二进制就可以了。

反码→将你的符号位不变,也就是最高位不变,其次再依次的按位取反,得到反码。

补码→补码就是 反码+1 就能够得到补码,注意:前提是要进行反码,基础上进行+1。

假设我们输入的n = 1的话,那么 0000 0000 0000 0000 0000 0000 0000 0001。

那么这里输出就为 ret = 1

题目代码

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int function(int n)
{
	int count = 0;
	int i = 0;
	for (i = 0; i < 32; i++)
	{
		// 假设n = 3
		// 0011 >> 0 - 0011 & 1111 +1
		// 0011 >> 1 - 0001 & 1111 +2
		// 0001 >> 2 - 0000 & 1111 [为假]count = 2
		if (((n >> i) & 1))
		{
			count++;
		}
	}
	return count;
}
int main(void)
{
	int n = 0;
	printf("请输入数字:");
	scanf("%d", &n);
	int ret = function(n);
	printf("ret = %d\n", ret);

	return 0;
}

运行结果

假设→请输入数字:3

ret = 2

最后

 已经快到五十题了,坚持下来就是胜利。先定一个小目标100题,然后两百题、三百题。一定要坚持下来加油💪,现在才是旅途的开始呢。