世界上有10种人,一种懂二进制的,另一种不懂 |
您所在的位置:网站首页 › 世界上第一笑话的人是谁 › 世界上有10种人,一种懂二进制的,另一种不懂 |
前一段时间看到网上有个笑话——世界上有10种人,一种懂二进制的,另一种不懂,这时有人问这不是才2种人吗? 哈哈哈不知你反应过来了吗?这个笑话也侧面反映了理解二进制系统的重要性,请细读下文,待我一步步揭开二进制的面纱。 编程新手在进行文件交互时常会遇到如下问题 什么是解码与编码,它们的本质是什么?在用编程语言进行读入、读出文件时会出现乱码的原因是什么?以及Unicode,UTF-8,GBK编码方式的区别在哪?想要真正的理解透这些问题,那么必须先深入性的了解二进制系统的一些知识。 本文我将从介绍二进制是什么以及与各进制之间转换方式逐步入手。 大家在网上肯定看到过上图这种庞大的数字照片,总给人一种黑客的神秘感,仔细一看,这类照片里的数字都是由0和1构成。在计算机内部里有电路和电线,由它们负责传送所有的信息,那么如何用电来储存或传递信息呢? 我们假设有一条有电流通过的电线,信号只有两种表达方式即打开(ON)和关闭(NO)或者在计算机网络里是高平和低平或对与错,1或0。或者其他只有两个选项的事物。单条线路上的开/关状态被称为一个比特(bit),这就是我们常听到的计算机信息储存中最小量的由来。 我们常用的进制有十进制、二进制和十六进制,我们先来看十进制,例如:7896这个数。这是一位四位数,每一位的数字都是由0~9构成,也就是说十进制的每一位都是小于十的自然数。 那么由这个规则我们可以推广到其他进制的数,例如二进制的数每一位都是小于2,即0和1构成,其他进制也同理。 2、各进制之间的转换同一个数可以用不同进制数来进行表示,它们的意义是一样的,只是看起来不同而已。那么不同进制的数又该如何转换呢? 例如: 如下,我们也可以推广成二进制转十进制,同理其他进制转十进制也可以这么展开。 那么怎么将十进制转为二进制呢?其实这与上就是上面的逆过程,但是太麻烦,有个大家都听过的短除法。例如我们将十进制的18转为二进制数。 小结上面的两个例子就是各进制转十进制、十进制转各进制的过程,那么如果N进制转M进制呢?我的建议是先将N进制转成十进制再转成M进制。 3、十六进制我们再来谈谈十六进制,前面提过计算机是采用二进制进行计算的,但是二进制有个问题就是信息密度低,要用很多位才能表示一个数,不利于人阅读,所以在电脑显示时人们通常让它转为十六进制。 十六进制由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十六个字符组成。 二进制数转十六进制数也十分方便,这里有两个方法,一是上边提到的二进制先转成十进制,再转成十六进制;二是从数字的后面即右边开始每四位转一个十六进制数,当到开头是不满四位以零填补就可以了又称8421法。 我们使用第二个方法将二进制的 101101101011011100 转换为十六进制,如图从尾开始,四个为一组,我们得到五组四位二进制数。 我们将该五组的四位二进制分别转换为十进制,再将十进制相组合的结果就是最终十六进制啦。其十六进制结果为 2DADC ,如下图。 那么此时我们再考虑一下由十六进制转为二进制,此时使用权重法太过于麻烦,我们刚好可以利用上面第二个方法的逆过程,如下图。 下面贴出二进制转换十进制的C语言代码: #include #include // 二进制转十进制 int main(){ char a[17]; gets(a); int len,i,sum=0,m,j; len=strlen(a); if(len |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |