最近受网友的邀请,就写一篇入门的教学文章。不过对于已经有一定实力水平的人来说,入门级的东西反而对于他(她)们来说不容易解释清楚,我也想挑战一下自己,看看我能把一些基础问题怎么解释能让智商80的人也能看明白(虽然这样说有点夸张),所以文章的标题就叫做“傻瓜学习C语言进制转换”,不过也不是没有要求的,要求是,看本文的时候,请你一定要按顺序看,并且要确定你会写这样一个c程序:输入一个int,分解出它的个位,十位,百位(提示:要用’%'求模运算和’/'整除运算)。。。。。。

1.数值与进制

数值与进制是两个不同的东西。数值是什么?100,200这种并不是数值。

什么是数值?古代的时候,人们记数,有一个物品就记一块石头,或者有11个物品,就打11个绳结,这就是数值,如果你要表示1000,那你还真的需要打1000个绳结来表示。可问题就是,这样子你会累死,为了不用累死,于是他们发明了另一种表达方式:准备两种不同的石头A和B,有一个,那就用一块A石头表示,两个就用两块A表示,如果太多了,比如10个,就用一块B石头来表示有10个A石头,比如AAAAABB表示25个。但是,如果表达的数值更大,那就再多准备一种石头C,每10个B石头就用一个C石头来表示,比如AABCC表示212。于是,这样就可以大大减少所需要的石头的数目,而这,就是进制。

进制是数值的一种表示方式

2.数值与进制的转化

进制是为了表示一个数值,如果是每10个进一,那么就是我们熟悉的10进制,否则,如果是每k个进一,那就是k进制,比如我们的时间,是每60秒记1分钟,这就是60进制。然后,怎么把一个用特定进制的表示,得到它的数值呢?很简单,比如上文说的AABCC,首先,有两个A,分解得AA + BCC,就是2 + BBC,然后,1个B就是10个A,于是就是AA + AAAAAAAAAA + AAAAAAAAAA + C,然后一个C等于10个B,就是AA + AAAAAAAAAA + AAAAAAAAAA + BBBBBBBBBB,这样一直拆下去,直到全部是A为止,你就得到实际的数值了,实际的数值就是A的个数,记住这一点,数值和进制是两码事。

然后,反过来,怎么把一个数值转化为特定进制呢?很简单,按照进制的定义,比如现在有数值AAAAAAAAAAAAAAAAAAAAAAA,然后,要转成10进制,那么我们每10个分一分组:AAAAAAAAAA + AAAAAAAAAA + AAA,然后,把10个A用B来表示,得到:B + B + AAA,如果B有10个,那再把它换成C表示。那么,如果你明白了以上方法,你就得到一个最基本的进制转换手段,就是先化为数值,再重新用另一个进制表示。比如10进制的13,要化成二进制,那么,就是BAAA -> AAAAAAAAAAA -> AA AA AA AA AA AA A 这时,换一个符号,每两个A用一个M表示,那么就是MM MM MM A,再每两个M用一个N表示,得到NN N A,再每两个N用一个P表示,得到P N A。而在这里,一个P等于8个A,一个N等于4个A,所以P + N + A你可以验算出8 + 4 + 1,等于原来的数值。而这种表示方法,就和罗马数字很相似,罗马数字里,用I表示1,用V表示5,用X表示10,于是18就用XVIII表达,用一个字母多次重复来表达一个数值。

后来,为了能更方便书写,因为字母数量是有限的,无法表达更大的数字,书写方式改用阿拉伯数字写在不同的位置来表达,于是就是我们今天的10进制数字。比如刚刚的例子,BAAA,有一个B,于是在十位写1,然后有三个B,在个位写3,也就是B的个数,组合起来就是13,这是十进制的情况。如果是二进制,刚刚我们得到的结果是PNA,注意这里没有M,相当于0个,而如果我们用二进制写,那就有四个位,个位有一个A,记1,第二位相当于M的个数,是0,组合起来是01,第三位是N,记1,组合是101,第四位有一个P,再组合就是1101,于是这就是10进制的13,化为二进制的结果。

3.进制的特点

问你,3638除以10的余数是多少?给你一秒种思考时间,多少?如果这个你不能马上说出来,那你就要反省了。结果应该是8,直接看个位不就对了。那么3638除以10的商呢?再给你一秒。。。。。。。。。。。。。。。。。。。这个答错的话要重读小学了,答案当然是363.8,如果把这个数取整,不要小数部分,那就是363。小学的时候你就应该知道,对一个数乘以10或者除以10这种计算是超简单的,因为我们用的是10进制。类似的,问一下你,经过60个5秒是多少分钟多少秒?再给你一秒思考时间,要毫不犹豫的回答我。你可别去计算60*5=300,这是多余的。答案是5分钟,时间我们用的60进制,那么乘以60只要改一下单位就足够了,肯定是对的。再问你,10分钟分成60份是多少秒?你必须立即回答我是10秒。

我们推广到任意k进制,按这个特点,k进制下,乘以k或者除以k的运算是超级简单的,比如8进制的123,乘以8肯定是1230,除以8就是12.3,相当于在移动小数点而已。于是,k进制下乘除k就是移动小数点。而除以k求余数的话,像刚刚的8进制的123除以8,就等于12余3,就是要得到个位上的数字,同时得到原来的数舍弃掉个位的结果。这个性质非常的重要!除法的本质是什么?其实除以k是得到被除数在k进制下的个位数(余数),和小数点左移的结果(商)。

4. C下实现数值转化为进制

好,现在回到程序,给你一个int n,要把它的各位上的数字取出来,按上面的性质,那就很简单了,先得到个位,n%10(这个’%'是求余运算),然后小数点左移,n = n / 10; 然后不断循环这个过程,如下代码:

intn = 2456;

while(n > 0)

{

printf("%d,", n % 10);

n = n / 10;

}

输出结果是”6,5,4,2,”,好好领悟一下这段代码。给你五分钟时间。每一次%10就是取出个位,每一次/10就是丢掉个位。

而如果把输出的结果里的数字,逆过来看,就是”2456″。

在这里,那个int所表示的,就是一个数值,刚刚我们的代码所做的事就是把这个数值,一位一位的分解出来。

而事实上,这个过程就是把数值转化为特定进制的过程。刚刚就是把数值转化为10进制。

如果把刚刚的代码改为:

intn = 13;

while(n > 0)

{

printf("%d,", n % 2);

n = n / 2;

}

没错,输出结果是”1,0,1,1″,就是刚刚把13化为二进制的例子,每一次%2就是取出二进制下的个位,每一次/2就是丢掉二进制下的个位。

只要把那个次序反过来,就得到1101,就是13化为二进制的结果。在你真正搞明白了除法的本质后,那么,数值转化为以k进制表示那是一件很简单的事。

5. 进制转化为数值

这部分我不打算讲,很多人对这个比起前面的内容来说容易理解很多,直接用进制的定义就已经很好办了,没什么太难理解的东西。

6. 作业

编写一个程序,输入三个整数n A B,表示把A进制的n,转换为B进制,并输出。

样例:

输入 输出

11 8 10 9

129 10 2 10000001

22 3 6 12

假定输入的A和B都在2-10这个范围,超出范围的不用去处理,输入的n保证在int范围内。

c语言60进制字母,傻瓜学习C语言进制转换相关推荐

  1. python语言自学-为什么建议大家都学习Python语言?原因在这

    有很多人在问小编,为什么说学人工智能一定要学Python?运行速度慢不好之类的,今天就让小编谈谈自己对于Python的感受. 一.先来说说Python的前景 随着"大数据"&quo ...

  2. 电脑基础c语言,C语言经验: 如何从零基础学习C语言?

    C语言是面向过程的,而C ++是面向对象的C和C ++之间的区别: C是一种结构化语言,其重点是算法和数据结构. 在C程序设计中,首先要考虑的是如何通过过程来处理输入(或环境条件)以获得输出(或实现过 ...

  3. r语言pls分析_零基础学习R语言分析GEO

    关于零基础用R语言分析GEO的视频已更新完,发布在B站,有兴趣的小伙伴可以移驾到B站,我的B站号:I_am_Becky 之前录制过一系列关于零代码分析GEO数据的,但是这样画出来的图太low了,所以学 ...

  4. 编程c语言零基础知识,零基础学习C语言都需要掌握哪些基础知识

    随着互联网的不断发展,越来越多的人都在学习互联网软件编程开发语言,而今天我们就一起来了解一下,零基础学习C语言都需要掌握哪些基础知识. 无论学习哪门语言先应该了解一下自己所学语言的背景,也可以说它的发 ...

  5. 学c语言要掌握的英语单词,学习C语言需要理解的英语单词

    学习C语言需要理解的英语单词,欢迎补充 Data Structures 基本数据结构 Dictionaries 字典 Priority Queues 堆 Graph Data Structures 图 ...

  6. 研究c语言必须的软件,为什么必须学习C语言

    原标题:为什么必须学习C语言 在我们刚刚接触编程的时候,我们总想要找到一种编程语言,是能够面向众多工作方向的万能语言,而且这种语言最好能简单好学,还要能方便找工作.可是理想是丰满的,现实是骨感的,没有 ...

  7. 删除字符串的大写字母c语言,将字符串大写字母变小写 C语言 字符串中大小写字母转换...

    java怎样将大写字母转换成小写字母 具体代码如下,字符串中大.小写互转 1)输入 第一行只有一个整数m(m都说欲擒故纵最能虏获芳心,可小编拿什么对抗她在皱眉时,小编忍不住嘘寒问暖的情绪. jquer ...

  8. 学习c语言必须要会函数吗,学习C语言必须要知道的那些事儿

    学习好C语言,首先我们要知道我们应该学习哪些内容,要系统的学习,然后才可以针对性的,有计划,有步骤的学习,不能今天学习这个,明天学习那个,杂乱无章,这样知识也行不行体系,很难学好,下面为小伙伴们梳理一 ...

  9. c语言php都用什么软件,学习c语言用什么软件

    如果你使用的操作系统是WINDOWS,那么可以使用Microsoft Visual Studio C++:如果使用的是Linux系统,那么C语言的编译器是gcc:如果使用的是UNIX操作系统,那么C语 ...

  10. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”

    原标题:用C语言编写小游戏--"井字棋" 作者:Milo Yip 来源:知乎 原文链接:https://zhuanlan.zhihu.com/p/39581573 在 Milo Y ...

最新文章

  1. 26个类型的常见面试精选总结(建议收藏)
  2. 免费获取验证码60秒倒计时
  3. 《ASCE1885的网络编程》---Winsock APIのIP地址转换函数
  4. dubbo学习之服务消费者
  5. UVA - 1314 Hidden Password(最小表示法)
  6. 漫谈MySQL权限安全,跳槽薪资翻倍
  7. 微信小程序正则判断姓名和手机号
  8. 调用webserver时出现:请求因 HTTP 状态 401 失败: Unauthorized。
  9. 国二c语言南开版的机试100题,[互联网]免费ncre全国计算机等级考试二级c语言上机---南开100题答案...
  10. ESP32音频框架 ESP-ADF 添加按键外设流程代码跟踪
  11. 2月19日CTF记录
  12. 无线电波是怎么产生的
  13. 抽水马桶工作原理演示
  14. js表格隔行变色案例
  15. 健康比什么都重要-网易CEO孙德棣先生辞世
  16. 【Python】绘制热力图seaborn.heatmap,cmap设置颜色的参数
  17. golang 后台管理系统框架
  18. 设置MyEclipse的编辑器和控制台为护眼色
  19. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to
  20. 旅行照片剪辑--呼伦贝尔篇--9.18

热门文章

  1. 【开发日志】gtest踩坑:-1: error: cannot find -llibgtest
  2. qt实现抽屉效果,类似qq的好友功能
  3. php 过滤绕过注入,PHPB2B注入#1(绕过过滤)
  4. 如何在linux系统下读写windows上的共享文件夹
  5. MFC在指定控件区域内进行一些操作
  6. 用electron实现播放flash小游戏
  7. Java 项目经典代码
  8. 广东省谷歌卫星地图下载
  9. 以下关于java文件名的叙述正确的有_sun java认证考试题库
  10. 使用Eclipse开发Android应用程序