【计算机科学速成课】[40集全/文字版] - 4.二进制

嗨,欢迎阅读计算机科学速成课!

今天,我们讲计算机如何存储和表示数字,所以会有一些数学,不过别担心,你们的数学水平绝对够用了。

上集我们讲了,怎么用晶体管做逻辑门,逻辑门可以判断布尔语句,布尔代数只有两个值:True和False,但如果只有两个值,我们怎么表达更多东西?这就需要数学了。上集提到,1个二进制值可以代表1个数,我们可以把真和假 ,当做1和0。如果想表示更多东西,加位数就行了,和我们熟悉的十进制一样,十进制只有10个数(0到9)要表示大于9的数,加位数就行了,二进制也可以这样玩。

拿263举例,这个数字"实际"代表什么?2 个100和6个10还有3个1,加在一起,就是263。注意每列有不同的乘数,100,10,1每个乘数都比右边大十倍。因为每列有10个可能的数字(0到9),如果超过9,要在下一列进 1。因此叫"基于十的表示法"或十进制,二进制也一样,只不过是基于2而已。因为二进制只有两个可能的数,1和0,意味着每个乘数必须是右侧乘数的两倍,就不是之前的100,10,1而是4,2,1,拿二进制数101举例,意味着有1个4,0个2,1个1。加在一起,得到十进制的5,为了表示更大的数字,二进制需要更多位数,拿二进制数10110111举例。我们可以用相同的方法转成十进制,1x128,0x64,1x32,1x16,0x8,1x4,1x2,1x1,加起来等于183。二进制数的计算也不难,以十进制数183加19举例,首先3+9,得到12,然后位数记作2,向前进1,现在算8+1+1=10,所以位数记作0,再向前进1,最后1+1=2,位数记作2,所以和是202。

二进制也一样,和之前一样,从个位开始,1+1=2,在二进制中也是如此。但二进制中没有2,所以位数记作0,进1,就像十进制的例子一样,1+1,再加上进位的1,等于3,用二进制表示是11,所以位数记作1,再进1,以此类推。最后得到这个数字,跟十进制202是一样的,二进制中,一个1或0叫一"位",上个例子我们用了8位,8位能表示的最小数是0,8位都是0。最大数是255,8位都是1,能表示256个不同的值,2的8次方,你可能听过8位机,8位图像,8位音乐。意思是计算机里大部分操作都是8位8位这样处理的,但256个值不算多,意味着8位游戏只能用256种颜色。

8位是如此常见,以至于有专门的名字:字节。1字节=8位(1bytes=8bits),如果有10个字节,意味着有80位,你听过千字节(KB)兆字节(MB)千兆字节(GB)等等...不同前缀代表不同数量级,就像1千克=1000克,1千字节=1000字节。或8000位。Mega是百万字节(MB),Giga是十亿字节(GB),如今你可能有1TB的硬盘,8万亿个1和0,等等,我们有另一种计算方法。

二进制里,1千字节=2的10次方=1024字节,1000也是千字节(KB)的正确单位,1000和1024都对,你可能听过32位或64位计算机,你现在用的电脑几乎肯定是其中一种。意思是一块块处理数据,每块是32位或64位,这可是很多位,32位能表示的最大数,是43亿左右。也就是32个1,所以Instagram照片很清晰,它们有上百万种颜色。因为如今都用32位颜色,当然,不是所有数都是正数,比如我上大学时的银行账户T_T,我们需要有方法表示正数和负数,大部分计算机用第一位表示正负:1是负,0是正。用剩下31位来表示符号外的数值,能表示的数的范围大约是正20亿到负20亿,虽然是很大的数,但许多情况下还不够用,全球有70亿人口,***近20万亿美元。

所以64位数很有用,64位能表达最大数大约是9.2×10^18,希望***在一段时间内不会超过这个数!重要的是(我们之后的视频会深入讲)计算机必须给内存中每一个位置,做一个"标记",这个标记叫"地址",目的是为了方便存取数据,如今硬盘已经增长到GB和TB,上万亿个字节!内存地址也应该有64位,除了负数和正数,计算机也要处理非整数,比如12.7和3.14,或"星历43989.1"。这叫浮点数,因为小数点可以在数字间浮动,有好几种方法表示浮点数,最常见的是IEEE754标准。

你以为只有历史学家取名很烂吗?它用类似科学计数法的方法,来存十进制值,例如,625.9可以写成0.6259×10^3,这里有两个重要的数:.6259叫"有效位数",3是指数,在32位浮点数中,第1位表示数的符号-正或负,接下来8位存指数,剩下23位存有效位数,好了,聊够数了,但你的名字是字母组成的,所以我们也要表示文字。

与其用特殊方式来表示字母计算机可以用数表示字母,最直接的方法是给字母编号:A是1,B是2,C是3,以此类推。著名英国作家弗朗西斯·培根(FrancisBacon)曾用5位序列来编码英文的26个字母,在十六世纪传递机密信件,五位(bit)可以存32个可能值(2^5)-这对26个字母够了,但不能表示标点符号,数字和大小写字母,ASCII,美国信息交换标准代码,发明于1963年,ASCII是7位代码,足够存128个不同值,范围扩大之后,可以表示大写字母,小写字母,数字0到9,@这样的符号,以及标点符号。

举例,小写字母a用数字97表示,大写字母A是65,:是58,)是41。ASCII甚至有特殊命令符号,比如换行符,用来告诉计算机换行,在老计算机系统中,如果没换行符,文字会超出屏幕,因为ASCII是个很早的标准,所以它被广泛使用。

让不同公司制作的计算机,能互相交换数据,这种通用交换信息的能力叫"互操作性"。但有个限制:它是为英语设计的,幸运的是,一个字节有8位,而不是7位,128到255的字符渐渐变得常用。这些字符以前是空的,是给各个国家自己"保留使用的",在美国,这些额外的数字主要用于编码附加符号,比如数学符号,图形元素和常用的重音字符,另一方面,虽然拉丁字符被普遍使用,在俄罗斯,他们用这些额外的字符表示西里尔字符。而希腊电脑用希腊字母,等等,这些保留下来给每个国家自己安排的空位,对大部分国家都够用,问题是,如果在土耳其电脑上打开拉脱维亚语写的电子邮件,会显示乱码。

随着计算机在亚洲兴起,这种做法彻底失效了,中文和日文这样的语言有数千个字符,根本没办法用8位来表示所有字符!为了解决这个问题,每个国家都发明了多字节编码方案,但相互不兼容,日本人总是碰到编码问题,以至于专门有词来称呼:"mojibake"意思是乱码,所以Unicode诞生了-统一所有编码的标准。设计于1992年,解决了不同国家不同标准的问题。Unicode用一个统一编码方案,最常见的Unicode是16位的,有超过一百万个位置,对所有语言的每个字符都够了,100多种字母表加起来占了12万个位置。还有位置放数学符号,甚至Emoji,就像ASCII用二进制来表示字母一样,其他格式-比如MP3或GIF-。用二进制编码声音/颜色,表示照片,电影,音乐,重要的是,这些标准归根到底是一长串位,短信,这个文章,互联网上的每个网页,甚至操作系统,只不过是一长串1和0

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值