计科04:[二进制]

二进制

视频

1. 二进制原理

逻辑门可以判断布尔语句,布尔代数只有两个值:True和False,但如果只有两个值,我们该如何表达更多东西?上文提到,1个二进制可以代表1个数,我们可以把真和假,当做1和0,如果想表示更多东西,加位数就行了。

我们熟悉的十进制,只有10个数(0-9),要表示大于9的数,就需要加位数。拿263举例,这个数字实际代表了:2个100、6个10、3个1,加在一起就是263。每列有不同的乘数(100,10,1),每个乘数比右边大十倍,如果超过9,就要在下一列进1(满十进一,满二十进二…),因此叫“基于十的表示法”或十进制

二进制也是如此,只不过是基于2而已。因为二进制只有两个可能的数,1和0;意味着每个乘数必须是右侧乘数的两倍,就不是十进制的100,10,1了,而是4,2,1。拿二进制数101举例,意味着有1个“4”,0个“2”和1个“1”,加在一起就得到十进制的5。

为了表示更大的数字,二进制需要更多的位数,拿二进制数10110111举例,可以用相同的方法转成十进制:1 x 128 ,0 x 64 ,1 x 32 ,1 x 16 ,0 x 8 ,1 x 4 ,1 x 2 ,1 x 1,加起来等于183。

二进制转十进制

二进制的计算也不难,以十进制数183加19举例:首先 3 + 9,得到 12,然后位数记作 2,满10向前进 1;再算 8+1+1=10,所以位数记作0,再满10进 1,最后1+1=2,位数记作2,和就是202。

二进制的计算:先把19换算为二进制就是00010011,从个位开始计算,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位非常常见,以至于有专门的名字:字节(Byte)

1字节(byte)等于8位(bits),如果有10个字节,就代表80位。千字节(kb)兆字节(mb)千兆字节(gb),不同前缀代表不同数量级,就像1千克=1000克,1千字节=1000字节(或8000位)。如今你可能有1TB的硬盘,代表8万亿个1和0。二进制里,1 千字节 = 2的10次方 = 1024 字节,1000 也是千字节(KB)的正确单位,1000 和 1024 都对。

2. 正数、负数、整数、浮点数的表示

你应该听过32位或64位计算机,意思是一块块处理数据,每块是32位或64位。32位表示的最大数是43亿左右,也就是32个1。所以 Instagram 照片很清晰,因为它有上百万种颜色,如今都用32位颜色。当然,不是所有数字都是正数,因此就需要有方法表示正数和负数,大部分计算机用第一位表示正负,即1是负,0是正,用剩下31位来表示数字,能表示的数字范围是正20亿到负20亿,虽然是很大的数,但有时还不够用。

计算机必须给内存中每一个位置,做一个 “标记”,这个标记叫 “位址”, 目的是为了方便存取数据,如今硬盘已经增长到 GB 和 TB,上万亿个字节!内存地址也应该有64位;除了负数和正数,计算机也要处理非整数,比如 12.7 和 3.14,或”星历 43989.1”,这叫浮点数

因为小数点可以在数字间浮动,所以有好几种方法 表示浮点数,最常见的是 IEEE 754 标准,它用类似科学计数法的方法,来存十进制值;例如,625.9 可以写成 0.6259×10 ^ 3,这里有两个重要数字:.6259 叫 “有效位数” , 3 是指数。在32位浮点数中,第一位表示数字的正负,接下来 8 位存指数,剩下 23 位存有效位数。

浮点数32位表示

3. ASCII

为了表示文字,最直接的方法是给字母编号:A是1,B是2,C是3,以此类推。著名英国作家 弗朗西斯·培根(Francis Bacon)曾用 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 的字符渐渐变得常用,这些字符以前是空的,是给各个国家自己 “保留使用的”。在美国,这些额外的数字主要用于编码附加符号,比如数学符号,图形元素和常用的重音字符;另一方面,虽然拉丁字符被普遍使用,但在俄罗斯,他们用这些额外的字符表示西里尔字符;而希腊电脑用希腊字母,等等。这些保留下来给每个国家自己安排的空位,对大部分国家都够用。

4. Unicode

随着计算机在亚洲兴起,这种做法彻底失效了,中文和日文这样的语言有数千个字符,根本没办法用 8 位来表示所有字符!

为了解决这个问题,每个国家都发明了多字节编码方案,但不相互兼容。日本人总是碰到编码问题,以至于专门有词来称呼:”mojibake” 意思是 乱码。

所以 Unicode 诞生了,它是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求, 设计于 1992 年,解决了不同国家不同标准的问题。最常见的Unicode是16位的,有超过一百万个位置,对所有语言的每个字符都够用了。100多种字母表加起来占了12万个位置。还有位置放数学符号,甚至 Emoji。

就像 ASCII 用二进制来表示字母或是其他格式,比如MP3或GIF,用二进制编码声音/颜色,表示图片、电影、音乐。重要的是,这些标准归根到底就是一长串位,包括短信, YouTube 视频,整个互联网上的每个网页,甚至操作系统,都只不过是一长串的1和0,二进制能表示一切!


  转载请注明: Zero的博客 计科04:[二进制]

 上一篇
Hexo部署至coding Hexo部署至coding
前言因本人的hexo是部署至github的,现在换了个主题图片有点多,导致访问速度非常慢,故想到部署到国内的服务器上,所以找到了coding,准备把hexo也同步部署到coding上去。 本文章记录了如何将hexo部署至coding,从而
2020-02-29
下一篇 
计科03:[布尔代数和逻辑门] 计科03:[布尔代数和逻辑门]
布尔逻辑和逻辑门视频 1. 什么是二进制计算机是最早的机电设备,一般用十进制计数,比如用齿轮数来代表十进制,再到晶体管计算机。 只用 开/关两种状态来代表信息,这叫二进制。如果只需表示true和false,两个值就够了。电路闭合,电流流过
  目录