计算机中的二进制 | 书香讲 CS 之四

计算机中的二进制 | 书香讲 CS 之四

二进制数字

之前我们制作出了逻辑门,让计算机可以表示逻辑“真”或“假”。但是只靠这两个状态,我们没法表达更多的信息,这时,我们就需要了解一些数学了。别紧张,这个可能比你初中学的数学还要简单!

用一个二进制的数可以表示“真”或“假”,我们用数字的方式计为 10。想要表达更多的信息怎么办呢?让我们想想十进制的数,一个数字可以表示 0 ~ 9,如果想表示 10 以上的数字,我们就在前面加上一位,就能表示出 0 ~ 99 的数字。二进制也是同样,通过在前面添加位数,可以表达更多的信息。

用十进制举例来说,数字 183 代表了什么呢?它表示了 1 个 100、8 个 10 以及 3 个 1 全部加起来:

183 = 1 × 100 + 8 × 10 + 3 × 1

注意我们乘的每个数都比右边的大 10 倍,因为每一位数字可以表示 10 个数字(0 ~ 9),只有超过 9 的才会加一位。这样基于每一位都有 10 个数字的计数方式,就是十进制

二进制的原理是一样的,只不过它每一位只有 2 个可能的数字(0、1),所以我们要乘的每个数都比右边的大两倍,不再是 100、10、1,而变成了 4、2、1。比如说二进制数 101,就代表了 1 个 4、0 个 2、1 个 1 相加,等于十进制的 5:

101 = 1 × 4 + 0 × 2 + 1 × 1

为了表示更多的信息,我们会有更长的二进制数,比如说 10110111,就代表了十进制的 183:

10110111
= 128 × 1 + 0 × 64 + 1 × 32 + 1 × 16 + 0 × 8 + 1 × 4 + 1 × 2 + 1 × 1
= 183

二进制计算

二进制的加减计算也很简单,我们同样还是从十进制举例。当我们计算 183 + 19 的时候,我们从个位开始,每一位对应相加,如果加出来的结果大于 10,就向下一位进一位:

同样,我们用二进制来计算,结果是一样的:

计算机中的二进制数

计算机中,二进制数的每一位叫做 “比特(bit)”。一个 8 个比特的数字最小是 0,最大是 11111111(255),总共能表示 256 个,也就是 2 的 8 次方个不同的数字。

在计算机中,我们处理的二进制位数都是 8 位的倍数,以至于我们给每 8 个比特单独起了个名叫做 “字节(Byte)”。你可能听过 KB 、MB、GB、TB,他们的单位都是字节,前面的字母代表了数量级:KB 代表一千字节,MB 代表一百万字节,GB 代表十亿字节,而 TB 就代表了一万亿个字节,也就是 8 万亿个 01

以前我们玩的“8 位机”,就代表他们的数据都是用 8 个比特来表示的。而现在的计算机一般都是 64 位机。

一个“8 位图像”,就代表它每一个像素点的颜色由 8 个比特来表示,也就是每个点可以有 256 种可能的颜色;而“32 位图像”就表示每个点可能有 2 的 32 次方,也就是 4,294,967,296 这么多种颜色,那可清晰多了!

8 位图片

64 位图片

负数、非整数

并不是所有的数字都是正数,一般计算机会用第 1 位作为标志位来表示正负,1 表示是负数,0 表示是正数。例如一个 32 位的数,第一位表示正负,剩下的 31 位表示数字,能表示的范围就大概是 -2,147,483,648 ~ 2,147,483,648。

表示小数的规则相对复杂些,目前较常用的是 IEEE 754 标准。它将 32 位数设置成了 1 个正负标志位(S)8 个指数位(E)、23 个有效数字位(M),最后表示的数字(V)计算公式如下:

ASCII 码,计算机中的字符表示

除了数字以外,计算机还通过给每个字符编上代码的方式,用二进制来表示文字。1963 年发明的 ASCII 码(美国信息交换标准代码)一直通用到现在。ASCII 码由 7 位二进制数表示,可以表达 128 个不同的字符,包括了大写字母、小写字母、数字 0 ~ 9,大部分标点符号及一些换行符、制表符等特殊符号。

比如说:字母“A”就由 65 表示,字母“b”是由 98 表示,标点“!”就用 33 表示等等。

ASCII 码表

UNICODE

ASCII 码简单易用,它使用不长于一个字节长度的二进制编码来解决了字符的问题。但是,ASCII 码却有个明显的缺陷:它只能供英语使用,其他国家的文字,比如中文有数千个常用字,根本没法用一个字节来编码。

各个国家都研究了自己的多字节编码方案,但因为各个国家的编码方案互不通用,导致在不同系统之间,就会产生乱码问题。例如,以前我们玩台湾或日本开发的计算机游戏,打开是乱码显示,需要使用转码器才能正常玩耍,就是这个原因。

1992 年,Unicode 诞生了,它统一了所有编码的标准,解决了不同国家不同编码标准的问题。常见的 Unicode 是 16 位的,可以表达超过一百万个字符,足够覆盖所有语言的每个字符了 —— 100 多种语言的字母(文字)大概占了 12 万个位置、剩下的还可以表示各种标点符号、数学符号、甚至 Emoji 表情!

其他编码

除了 ASCII 码,Unicode 编码表示字符以外,还有其他常见的例如 MP3、PNG、MP4 等等各种编码格式,可以用来表达声音、图片、视频等信息。我们在计算机中见到的照片、音乐、电影、游戏、网页、甚至操作系统,它们归根到底都是一串很长的“0、1”比特!

之后

了解了计算机基本的表达形式:二进制,以及它的计算以及编码。接下来,我们就会真正走进计算机的“计算”方式,看看在计算机内部是怎么操作这些二进制,来帮助人们完成工作的。下期见~


评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×