持续创作,加速成长!这是我参与「掘金日新计划 · 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题,然后两百题、三百题。一定要坚持下来加油💪,现在才是旅途的开始呢。