利用权值获取各种进制数据的每一位

编程入门 行业动态 更新时间:2024-10-27 08:30:56

利用权值获取各种进制数据的<a href=https://www.elefans.com/category/jswz/34/1712432.html style=每一位"/>

利用权值获取各种进制数据的每一位

目录

输出一个整数的每一位

理解十进制权值:

那么计算机中最常见的二进制是否也是如此呢?

理解了以上十进制中位数和权值的关系,这个问题就很简单了

总结一下


c语言中有一个经典问题:输出一个整数的每一位

比如输出1234的每一位:
方法很简单:

1234%10==4;这样就获得了个位

1234/10=123;这样就把十位的数放在了个位

然后只要利用递归先进后出就可以从最高位开始打印

代码如下

//输出一个整数的每一位。
void print(int num)
{if (num < 10)printf("%d", num);else{print(num / 10);printf("%d", num % 10);}//由于先进后出,个位最后打印
}
int main() 
{int num = 0;scanf("%d", &num);print(num);
}

可以看见这里取模和除法运算与‘十’密不可分

关于这一点可以利用权值理解:

在十进制中,1234中4的权值是1,3的权值是10

这个数除以十得到123(个位数被舍去),3的权值变成了1,也就是3*10变成了3*1

这时再次%10自然就能得到权值为1的个位了

那么计算机中最常见的二进制是否也是如此呢?

还是借助一个经典问题

写一个函数返回参数二进制中 1的个数

理解了以上十进制中位数和权值的关系,这个问题就很简单了

来看原理1011/2==101,111/2==10

这样可以把二进制中的每一位都放在最低位上

现在只要用1&这个数,根据0或者1判断该位是否是1了

具体算法可以利用while循环,如下

int count_one_bits(int num)
{int count = 0;int i = 0;while (num)//拆到1/2=0结束{if(1&num)count++;//先统计完当前最后一位再拆num /=2;}return count;
}
int main()
{int num = 0;scanf("%d", &num);int ret = count_one_bits(num);printf("%d\n", ret);}

 这里其实还可以使用移位符更直接的获得每一位

但我个人觉得利用权值的方法更加通用,能够体现进制的本质

总结一下

无论是什么进制,每一位的数字符号背后都有一个权值,给了数字意义

只要除以这个进制所对应的数,就可以实现降位,最终把每一位都放到最低位

除以2或10的原理,困扰了我很久,现在搞清楚分享出来,希望对其他新学c的小伙伴有所帮助

不过本人刚学c,对于怎么处理其它进制的最低位还不怎么了解,欢迎大佬指教

新人,代码纯手写,结论个人归纳总结。觉得有帮助或者觉得用心了,就请点点赞👍吧

球球了

更多推荐

利用权值获取各种进制数据的每一位

本文发布于:2024-03-10 12:28:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1727978.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:每一位   数据

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!