前言

上一期讲了如何使用晶体管创建逻辑语句,以及布尔代数的基础True和False。

但如果我们只有两个值,我们怎么表达两个值之外的东西?

这时就需要一点点数学知识了。

二进制原理

我们可以把“真”和“假”,分别当做“1”和“0”。如果想表示更多东西,加位数就行了。

类似于十进制,单个十进制数,只能表示 10 个可能数字(0到9)中的一个,要表示大于 9 的数,加位数就行了。如:263=2*100+6*10+3,乘数分别是 100, 10 和 1,每个乘数都比右边的大十倍,因为每列有 10 个可能的数字(0到9),之后要在下一列进 1。

二进制也一样,只不过是基于2而已,因为二进制中的每一位只有2个取值,所以 每个乘数是右侧乘数的两倍,所以我们要用我们用 4,2,1 代替之前位置上的 100,10 和 1。那么101 代表的值就是 1*4+0*2+1*1=5。

Great !

​同样道理,为了表示更大的数字,二进制需要更多位数,拿二进制数“10110111”举例,可以用相同的方法转成十进制,如下算得结果是183。

二进制中的每个“1”或“0”叫做一个“比特(bit)”,如二进制数:10101010 就有8 个比特(bit),8个bit最小能表示的数是 0,最大能表示的数是255(8位全是1的情况),也就是说一共能表示 2^8=256 个不同的值。

你可能听过 8 位机,或 8-bit 图像或 8-bit 音乐,意思就是计算机大部分时候都是 8 位 8 位的来处理数据,8-bit 是那么的常见,以至于有一个专门的名字:一个字节(byte),1 Byte = 8 bits。

更大的单位是 KB, MB, GB, TB, 他们之间的换算是这样的:

1KB (Kilobyte 千字节)=1024B,

1MB (Megabyte 兆字节 简称“兆”)=1024KB,

1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,

1TB (Trillion byte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方)。

你可能也听过 32 位 或 64 位计算机,这意味着他们一块块处理,每块都是 32 位或 64 位!

正负数,浮点数的表示

当然,不是一切数都是正数,我们需要表示正数和负数,大部分计算机用第一个 Bit (位)表示正负:1 是负,0 是正。然后剩下 31 位来表示数字,这样的话,我们能表示的正负数范围是 +20 亿 到 -20 亿,这虽然是个很大的数,但很多时候不够用。例如全球有 70 亿人口,美国国债近20 万亿美元,这就是为什么 64 位很有用,​64 位可表示的最大数是 9.2 x 10 的 9 次方!

除了正数和负数,计算机还需要表示浮点数,如12.7 和 3.14,这些叫“浮点数”,因为小数点可以在数字间到处浮动,最常见的是 表示方法是 IEEE 754 标准,本质上,这个标准用类似科学计数法的方法,来存储十进制值。例如,625.9 可以写成 0.6259×10 ^ 3,这里有两个重要数字:.6259 叫做 “有效位数”,3 是指数,在 32 位浮点数中,第 1 位表示数字的正负,接下来 8 位存指数,剩下 23 位存有效位数。

文字的表示

电脑可以用数字来表示字母,最直接的方法是对字母进行编号:A为1,B为2,C为3,等等。最著名的就是ASCII码,美国信息交换标准代码,

发明于1963 年,它是 7 位代码,足够存128 个不同值,范围扩大之后,可以表示大写字母,小写字母,数字 0 到 9,@这样的字符,以及标点符号等。例如 小写字母“a”用数字 97 表示,大写字母“A”是 65。

因为 ASCII 是个很早的标准,所以它被广泛使用,更重要是,使得不同公司的计算机能交换数据,这种通用交换信息的能力叫做“互用性”,但有个限制:它是为了英语设计的!所以在亚洲使用,它就崩溃了,因为中文和日文这样的语言有数千个字符!

Unicode发明

为了解决ASCII码的问题,每个国家都发明了多字节编码方案,但不相互兼容,所以就经常造成乱码现象。为了解决不同国家不同标准的问题,1992 年,诞生了Unicode!Unicode最常见的是16位的,有超过一百万个位置,用一个统一的编码方案,对所有语言的每个字符进行了编码。

总结与展望

这一节我们讲解了二进制的原理和使用二进制来表示日常十进制中的正数、负数和浮点数,并且还可以用二进制来表示文字!但是计算机是如何操作这些二进制的呢?

关于这个问题,我们下一期再讲~

PS: 本系列文章首发于同名公众号,关注并回复关键字「 1024 」,你懂得!

相关推荐