编码

Note

1. 至亲密友

编码是为了对语言的扩充,口语以及书面语不能够在任何情况下都适用,因此除了特殊 的编码以应付特殊状况。聋哑人的手语以及盲人的盲文、摩斯电码等。

2. 编码与组合

这种文字的扩充使用的是二进制的方式,例如摩斯电码仅仅使用了「点」和「划」,通 过多种组合来表示不同的内容。

3. 布莱叶盲文与二进制编码

布莱叶盲文同样使用的是二进制的方式,通过「凸」和「平」两种状态来表示字符。并 且有了作用域这样的概念,在不同的作用域当中,相同的符号表示不同的内容,这种双 重身份的符号称为「换挡码」。同时还有「逃逸码」,它仅影响紧随其后的符号。

4. 手电筒的剖析

在电池内部,电子因为化学作用全部逃逸到负极,正极则缺少电子,由于电池内部的化 学反应缓慢,在电池内部电子很难会到正极。

当由导线连接电池的正负极时,电压会迫使正极从相邻的原子中捕获电子,而相邻的原 子又从下一个捕获,直到连接负极的原子从负极捕获电子,这样就行了一个电路,电子 从负极源源不断的被运输到正极。

在原子内部,质子带有正电荷,电子有负电荷,中子则为中性。质子和中子被强力舒服 在原子核的中心,电子则围绕着原子核旋转。当质子和中子被强大的力量分裂后,就会 形成核能。而由于电子在外围围绕,因此电子可能会产生逃逸,当电子逃逸后,原子核 就会从其他原子核中捕获电子来维持平衡。

电路中的开关可以控制电子是否可以从负极去到正极。这也是典型的二进制结构,要么 开要么关,不存在第三中状态。

在电子通过导线的过程中,导线会发热,因为在运输过程中一部分电能被转换成了热能, 当足够热的时候导线会变红,然后开始发光。钨丝在空气中会开始燃烧,但是在真空中 则会持续发光。

5. 绕过拐角的通信

  1. 通过电路系统可以建立跨距离的摩丝电报系统。
  2. 地球可以作为一个巨大的导线来承担另一条导线,但是需要足够高的电压。
  3. 导线越粗电阻越小,因为每秒可以有更多的电子通过导线。但是导线越长,电阻越大, 因此可以提高电压。

6. 电报机与继电器

导线过长以及高电压都会限制电报的发送距离,一个好的解决方案是使用中继器,中继 器可以接受到发送人的信息,然后再转发给接收人。

电报的接收端是通过电磁铁的方式,连接发生器来进行接受。如果把发送端的按压器拆 掉,利用电磁铁的磁性来控制开关,那么电磁铁就可以作为中继器来自动转发电报。

中继器是一个自动化的开关,发送者通过发送电流来控制电磁铁,电磁铁是否有电又可 以控制中继器的开关,中继器的开关又会产生与发送者相同的电流,通过这种方式来对 电报进行转发。

7. 我们的十个数字

  1. 十进制的出现是因为我们最初用手指进行记数。阿拉伯数字的优势在于非常适合进行加法计算。

8. 十的替代品

  1. 十进制的问题在于在做计算的时候,你必须记住 99 乘法表才能够计算。八进制也同理。而二进制,作为最简单的记数方式,他的加法和乘法都非常简单,因为只有 0、1.
  2. 与十进制相同,我们可以通过 2 的次幂来表示二进制的数字。
  3. 二进制是最为简单的方式,也是自然界最简单的系统,如何一个电路开关一样,1 可以表示开,0 可以表示关。
  4. 万事万物都是由多个简单的系统组成的。其原理似乎都像二进制一样简单,也就是所有的问题剖开之后,都是「是和否」的问题。

9. 二进制数

  1. 二进制表示最简单的逻辑开关,我们可以根据所出现的情况来选择合适的二进制位数,来为所有的情况进行编码。
  2. 同样我们可以为二进制进行分组,例如用二进制表示布莱叶盲文时,六个二进制数字表示一个布莱叶盲文。
  3. 二进制同样也是逻辑学的一种表示方式,1 表示为真,0 表示为假。

10. 逻辑与开关

  1. 逻辑中的真和假其实就是布尔运算中的交集和并集的结果。
  2. 在布尔运算中,交集表示为「x」并集表示为「+」
  3. 同样,交集相当于是电路中的并联电路,也就是二者都为「真」结果才能是「真」,在计算机逻辑中相当于「AND」
  4. 并集相当于是串联电路,只要有一个为真,结果就为真。在计算机逻辑中相当于是「OR」
  5. 在布尔元算中,用「1-」来表示对立的另一部分,也就是相当于「NOT」

11. 门

  1. 通过布尔运算可以设计出一种由两个开关组成的电路,交集(AND)开关是与门,并集(OR)开关是或门,非(NOR)则是反向器。
  2. 根据摩根定律,!A x !B = !(A+B),或者 !A + !B = !(A x B),摩根定律是简化摩尔运算的方式。
  3. 根据摩根定律,这种取反的方式来设计的电路,称为「或非门」和「与非门」。

二进制加法

  1. 将 OR 与 NOR 进行并联,然后同时输出到一个 AND 中,就形成了异或门(XOR)
  2. 二进制的加法计算表:

将加法计算表拆成两部分,一部分为原有数位的,另一部分为进位的。于是就形成了两张表格: 左侧的原位上,输出的就是 XOR,右侧进位输出的就是 AND,将 XOR 与 AND 并联就行了一个「半加器」,半加器有两个输出,一个是进位输出,一个是加和输出。加和输出展示当前位置上的结果,进位输出作为一个加数参与到下一个半加器的计算中,与下一个半加器的加和输出再次相加,再次输出第二个加和输出,而进位输出要与第二个半加器的进位,通过 OR 来输出最终的结果。

13. 如何实现减法

  1. 利用补十的方法,例如 256-129,可以写成 999-129 + 256 - 1000 + 1,应用到二进制就可以是 101 - 11,可以写为 111 - 11 + 101 - 100 + 1。
  2. 而 111 - 101 = 10,其实就是对减数 101 取反,把 101 变成 010。因此在减法的设计中,其实就是对加法加上取反器。
  3. 二进制中表示负数的方式,需要先设定一个范围,也就是为什么 int 的长度为 16 位,long int 为 32 为,因为二进制中必须设定范围。有了范围之后,该范围的最大值为 MAX,因此用 0~MAX 来表示证书,而超出 MAX 的数表示负数,而超出的范围也不会超过 2MAX。
  4. 在二进制中 MAX+1 表示 -1,MAX + MAX 表示 0.

15. 字节与十六进制

  1. 最初人们使用 8 个 bit,也就是 8 位二进制来进行计算,这用起来很方便。为了更方便的描述,之后就用一个字节 byte 来替代 8 个 bit。
  2. 一个字节內可以表示 256 个不同的符号,256 个符号正好可以容纳下大多数语言中的拉丁字母。
  3. 对于中日韩,一个字节无法容纳所有的文字,所以就用了两字符,也就是 65536,这样正是 Open Type 中所包含的码位。