本文主要是介绍计算机科学速成课 Crash Course Computer Science 第四集 二进制 Representing Numbers and Letters with Binary,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
GitHub链接:https://github.com/WilliamWuLH/My-notes-about-CCCS
如果你觉得不错可以 ⭐Star 和 Fork ❤
计算机科学速成课 Crash Course Computer Science
第四集 二进制 Representing Numbers and Letters with Binary
二进制的表示和运算
二进制只有两个可能的数:1和0,意味着每个乘数必须是右侧乘数的两倍。拿二进制数101举例,意味着有1个“4”,0个“2”,1个“1”,加在一起得到十进制的5。
为了表示更大的数字,二进制需要更多的位数,拿二进制数10110111举例,用相同的方法转成十进制,计算如下:
二进制的运算与十进制一样:
位
在二进制中,一个1或0叫一“位”(bit),上面例子中用了8位,8位能表示的最小数是0,8位都是0,最大数是255,8位都是1,能表示256个不同的值,即2的8次方。
平时说的8位机,8位图像,8位音乐意思是计算机里大部分操作都是8位8位这样处理的。但是256个值不算多,意味着8位游戏只能用256种颜色。
字节
8位是如此常见,以至于有专门的名字:字节(byte),1字节 = 8位,1 byte = 8 bits,如果有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。
正数与负数
但是不是所有数字都是正数,我们需要有方法表示正数和负数,大部分计算机用第一位表示正负,1是负,0是正,用剩下的31位来表示数字,能表示的数字范围是正20亿到负20亿,但还是不够用,所以64位数很有用,64位能表达最大数是9.2*10的18次方。
重要的是,计算机必须给内存中的每一个位置做一个标记,这个标记叫“位址”(addresses),目的是为了方便存取数据。如今硬盘已经增长到GB和TB,上万亿个字节,内存地址应该有64位。
浮点数
除了负数和正数,计算机也要处理非整数,这叫“浮点数”(floating point numbers),因为小数点可以在数字间浮动。有好几种方法表示浮点数,最常见的是 IEEE 754 标准。它用类似科学计数法的方法来存十进制值,例如,625.9可以写成0.6259*10的3次方,这里有两个重要数字:.6259叫“有效位数”(significand),3是指数(exponent),在32位浮点数中,第1位表示数字的正负,接下来的8位存指数,剩下的23位存有效位数。
字母
计算机可以用数字表示字母,最直接的方法就是给字母编号。ASCII(American Standard Code for Information Interchange)美国信息交换标准代码发明于1963年,ASCII是7位代码,足够存128个不同值,范围扩大之后,可以表示大写字母,小写字母,数字0到9,@这样的符号,以及标点符号。ASCII甚至有特殊命令符号,比如换行符,用来告诉计算机换行,在老计算机系统中,如果没有换行符,文字会超出屏幕。因为ASCII是个很早的标准,所以被广泛使用,让不同公司制作的计算机能互相交换数据,这种通用交换信息的能力叫“互用性”(interoperability),但是有个限制:它是为英语设计的。
幸运的是,一个字节有8位,128到255的字符渐渐变得常用,这些字符以前是空的,是给各个国家自己“保留使用的”。在美国,这些额外的数字主要用于编码附加符号,比如数字符号,图形元素和常用的重音字符。另一方面,虽然拉丁字符被普遍使用,在俄罗斯,他们用这些额外的字符表示西里尔字符,而希腊电脑用希腊字母等等,这些保留下来给每个国家自己安排的空位对大部分国家都够用,但问题是如果在土耳其电脑上打开拉脱维亚语写的电子邮件会显示乱码,随着计算机在亚洲兴起,这种做法彻底失效了,中文和日文有数千个字符,无法用8位来表示。
Unicode
为了解决这个问题,每个国家都发明了多字节编码方案,但是互不兼容。所以Unicode诞生了——统一所有编码的标准,设计于1992年,解决了不同国家不同标准的问题。Unicode用一个统一编码方案,最常见的Unicode是16位的,有超过一百万个位置,对所有语言的每个字符都够了,100多种字母表加起来占了12万个位置,还有位置放数学符号,甚至Emoji。
就像ASCII用二进制来表示字母一样,其他格式如MP3或GIF,用二进制编码声音或颜色,表示照片,电影,音乐。重要的是,这些标准归根到底是一长串位。
这篇关于计算机科学速成课 Crash Course Computer Science 第四集 二进制 Representing Numbers and Letters with Binary的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!