计算机输出各种文字,图片,视频,程序运行结果等一切东西,看起来是个丰富多彩的世界,然而计算机并不像我们看到的那样聪明,它的功能强大得益于人类编写的程序、软件。在所有丰富多彩的表象下,一切系统,程序,图片等都由0和1组成。一张图片是一串由0和1组成的序列,一个程序也是由0和1组成的一串序列。这种只使用0和1来计数、记录的方法叫做二进制。与之相对应的,人类使用的是十进制,使用0-9来计数。二进制跟十进制很相似,通过与我们熟悉的十进制的比较,我们可以理解二进制系统的运作。
十进制与二进制
当我们使用十进制计数的时候,当数到9再没有别的符号来表示第十个时,我们会在个位上填0,然后在十位上填1,得到10。当数到99时,无法用两位数字表示第一百个数字时,就会在个位和十位上分别填0,在百位上填1,得到100。如此循环往复,我们就可以用0,1,2,3,4,5,6,7,8,9十个符号来表示任何数字。
那么当使用二进制,也即只使用0和1来计数时,每一个位权都是2的次方,从低位到高位,从2的零次方开始,依次为1,2,4,8,16,32,64……把一个二进制数转换为十进制数很简单,如上图中的二进制数10110,通过1×16+0×8+1×4+1×2+1×0得到22,二进制数0转换为十进制数不变,二进制数1转换为十进制数不变,二进制数10转换为十进制数为2,二进制数11转换为十进制数为3。
- 22被2整除,得到的余数写在旁边,只要得到的结果大于0,则继续被2整除,把余数写在旁边(当1被2整除时,0×2+1=1,结果为0,余数为1)。
- 将所有的余数从下到上排列起来,我们就得到了二进制数。22的二进制表达为10110。
类似于十进制数的一位数,两位数,三位数,四位数……来表达一个数有多少位,在计算机应用二进制数时,一位二进制数被叫做一比特(1bit),两位二进制数就可以称为两比特(2bits),三位二进制数称为三比特(3bits)……为了简便,又把八位二进制数(8bits)称为一个字节(1Byte)。
编码
人类只是使用十进制数来计数,做数学相关的应用,而二进制就不同了,计算机用它来计数、计算,执行指令,存储东西、程序,表示颜色,显示图片、视频,那么这是怎么做到的呢,答案是通过编码。编码就是通过一一映射,将两种毫无关联的东西联系起来,并且用一种东西来代表另一种东西,这是一种人为的设计。计算机世界里最著名的编码要算ASCII码了,通过设计,键盘上的大部分字母和符号都跟某个八位的二进制数捆绑(映射)在一起,这样当我们输入一些英文时,电脑实际做的却是把跟这些英文一一对应的二进制数存储在内存里或者硬盘上。通过各种不同的编码,电脑仅仅使用0和1就能代表任何东西了。当人类想从电脑中得到相关信息并且希望能够看得懂时,会有相应的程序来通过解码(编码的逆运算)的方式显示出来。
计算机采用二进制的好处
为什么计算机要采用二进制而不是采用人们所熟悉的十进制呢?我们知道,计算机是由各种电子元器件组成,并由电流驱动的。最早的晶体管只具有两种状态,磁盘上的一个存储点的磁极也具有两种状态,磁极的南跟北,电子元器件的电平也具有两种状态,高和低,这正好跟二进制的一个位所能代表的状态所吻合,从物理的角度讲,易于元器件的制作,只有两种状态,也易于电脑内部清晰的传递信息(不容易出错)。另外,0和1正好对应逻辑上的真和假,用二进制表示二值逻辑很自然。最后,二进制的运算法则较为简单,能够简化电脑硬件结构。
欢迎浏览我的个人博客,https://diwugebingren.github.io