概述:
- 用十进制举例二进制原理,演示二进制加法,存储单位 MB GB TB等
- 正数,负数,整数,浮点数表示
- 美国信息交换标准代码 - ASCII,用来表示字符
- UNICODE 1992年诞生,是字符编码标准,解决ASCII不够表达所有语言的问题
今天我们讲计算机如何存储和表示数字,所以会提到一些数字。
上篇文章介绍了怎么样用晶体管做逻辑门,逻辑门可以判断布尔语句,布尔代数只有两个值:True 和 False。但是如果只有两个值,我们怎么表达更多的东西?这就需要数学了,上篇提到1个二进制可以代表1个数,我们当然可以把真和假,当作1和0。如果想要表达更多东西(larger things 更大的),增加二进制位数就就可以了。和我们熟悉的十进制一样,十进制只有10个数字(0到9),要表示大于9的数,加位数就行了,二进制也可以这样做。以263为例,这个数字实际代表什么?代表:2个100,6个10,3个1,加在一起就是263。注意每列有不同的乘数,这个例子中,分别是100,10,1。每个乘数都是右边的十倍,因为每列有10个可能的数字(0到9), 如果超过9,要在下一列进1。因此叫“基于10的表示法” 或者 “十进制”。(BASE-TEN NOTATION)(DECIMAL NOTATION)。二进制也一样,只不过是基于2 (BASE-TWO NOTATION),因为二进制只有两个可能的数,1和0。意味着每个乘数必须是右侧乘数的两倍。不再是之前的100,10,1而是4,2,1。拿二进制数101举例,意味着1个4,0个2,1个1,加在一起十结果是十进制的5,为了表示更大的数字,二进制需要更多位数。
再看个例子,二进制数10110111,我们可以是使用相同的方法转成十进制,相当于:1个128,0个64,1个32,1个16,0个8,1个4,1个2,1个1,相当于128+32+16+4+2+1=183。二进制数的计算也不算难。
以十进制数183加19为例,首先3+9,得到12,然后位数记作2,向前进1。接着算8+1+1=10,所以位数记作0,再向前进1。最后1+1=2,位数记作2。最终结果是202。
二进制也是一样的,和之前一样,从个位开始,183二进制为10110111,19二进制为00010011,1+1=2,但是二进制中没有2,所以位数记作0,进1,后续步骤省略,最终2进制结果为11001010,对应十进制结果为202。二进制中,一个1或0叫一位(BINARY DIGIT)。上个例子我们用了8位,8位能表示的最小数是0,8位都是0,最大数是255,8位都是1,能表示256个不同的值,2的8次方。你可能听过8位机,8位图像,8位音乐,意思是它们是大部分操作8位8位处理的计算机(计算设备computers)(These were computers that did most of their operations in chunks of 8 bits.)但是256个值不算多,意味着8位游戏只能使用256种颜色,而24位对应1677万7216种颜色。在计算中,8位是如此常见的大小,以至于有专门的名字(单词):字节。1字节=8位,1 byte = 8 bits。如果有10个字节,意味着有80位。你听说过千字节(kb kilobytes)兆字节(mb megabytes),千兆字节(gb gigabytes)等等。不同前缀代表不同数量级,就像1千克(kilogram)= 1000克(grams),1千字节=1000字节。或者8000位。Mega是百万字节(MB),Giga是十亿字节(GB)。
如今你可能有1TB的硬盘,那是8万个1和0,等等,这不是总是对的(That’s not always true ? 还是 That’s not all way true?我们有另一种计算方法),二进制里,1千字节=2的10次方=1024字节,1000字节(KB)也是正确的单位,但是我们得知道这不是唯一正确的定义,(1000和1024都对)。你可能听过32位或64位计算机,你现在用的电脑肯定是其中一种。意思是电脑是一块一块处理数据的,每块是32位或64位,这可是很多位。32位能表示的最大数,是43亿左右,也就是32个1,所以Instagram照片很清晰,它们有上百万种颜色,因此如今都是用32位颜色。
当然不是所有的数字都是正数,比如我们上大学时的银行账户,我们需要有方法表示正数和负数,大部分计算机用第一位表示正负:1是负,0是正,用剩下的31位来表示数字,能表示的范围是正的20亿到负的20亿,虽然是很大的数,但有时还不够用。全球有70亿人口,美国国债近20万亿美元,所以64位数很有用,64位能表达的最大数是9.2x10^18,希望美国国债在一段时间内不会超过这个数,重要的是,我们视频后续会深入讲解,计算机必须给内存中每一个位置,做一个标记,这个标记叫地址,目的是方便存取数据(ADDRESS),如今硬盘(computer memmory)已经增长GB和TB,上万亿个字节。内存地址也应该有64位,除了负数和正数,计算机也要处理非整数,比如12.7和3.14,这就做浮点数,因为小数点可以在数字间浮动,有好几种方法,表示浮点数,最常见的是IEEE 754标准,你以为只有历史学家取名字烂吗?它用类似科学计数法的方法,来存十进制值,例如:625.9可以写成0.6259x10^3,这里有两个重要的数字,.6259叫做有效位数,3是指数,在32位浮点数中,对应表示为:0 10001000 00111000111100110011010第一位0表示数字的正负,接下来八位存指数,剩下23位存有效位数,(SIGN EXPONET SIGNIFICAND)。
好了,聊过数字了,但是你的名字是字母组成的,所以我们也要表示文字,与其使用特殊方式来表示字母,计算机可以用数字表示字母,最直接的方法是给字母编号:A是1,B是2,C是3,以此类推。著名英国作家弗朗西斯.培根,曾用5位序列来编码英文的26个字母,在十六世纪床底机密信件,五位(bit)可以存32个可能值(2^5),这对26个字母够了,但不足以表示标点符号,数字和大小写字母(but not enough for…),ASCII(American Standard Code for Information Interchange),美国信息交换标准代码(编码?),发表于1963年,ASCII是7位代码,足够128个不同值,范围扩大之后,可以表示大写字母,小写字母,数字0到9,@这样的符号,以及标点符号,举例,小写字母a用数字97表示,大写字母A是65,:是58,)是41,ASCII甚至有特殊符号,比如换行符,用来告诉计算机换行,在老计算机体系中,如果没有换行符,文字会超出屏幕,因为ASCII是很早的标准,所以它被广泛使用,让不同公司制作的计算机,能相互交换数据,这种通用交换信息的能力叫做“互用性”(interoperability)。但有个限制:它是为英语设计的,幸运的是,一个字节有8位,而不是7位,128到255的字符渐渐变得常用,这些字符以前都是空的,是给各个国家自己“保留使用的”(previously unused, for “national” characters),在美国,这些额外的数字主要用于编码附加符号,比如数学符号,图形元素和常用的重音字符。另一方面,虽然拉丁符被普遍使用,在俄罗斯,他们用这些额外的字符表示西里字符(Cyrillic characters),而希腊电脑用希腊字母,等等。这些保留下来给每个国家自己安排的空位,对大部分国家都够用。问题是,如果在土耳其电脑上打开拉脱维亚语写的电子邮件,会显示乱码。随着计算机在亚洲兴起,这种做法彻底失效了。中文和日文这样的语言有数千个字符,根本没办法用8位来表示所有字符,为了解决这个问题,每个国家都发明了多字节编码方案,但不相兼容,日本人总是碰到编码问题,以至于专门有词来称呼:MOJIBAKE,意思是乱码。所以Unicode诞生了,统一所有编码的标准,设计于1992年,解决了不同国家不同标准的问题,Unicode用了一个统一的编码方案,最常见的Unicode是16位的,有超过一百万个位置,对所有的语言的字符都够用了,100多种字母表加起来占了12万个位置,还有位置放数学符号,甚至Emoji,就像ASCII用二进制来表示字母一样,其他文件格式,比如MP3或GIF,用二进制编码声音或颜色,来表示图片、电影和音乐。重要的是,这些标准归根结底是一长串比特(bits),短信,这个Youtube视频,互联网上的每个网页,甚至操作系统,只不过是一长串1和0。
下个教程,我们会讲讲计算机怎么操作二进制,初尝“计算”的滋味。 https://www.bilibili.com/video/BV1EW411u7th?p=4