计算机科学 - 二进制和算数逻辑单元

现代的计算机和依赖计算机的设备里都用到二进制,而算术逻辑单元主要功能是进行二进制的算术运算。

布尔代数

布尔代数(Boolean algebra)是捕获了集合运算和逻辑运算二者的根本性质的一个代数结构。

特别是,它处理集合运算交集、并集、补集;和逻辑运算与、或、非。

布尔代数是计算机的基础和核心。

计算机科学相关的基本操作符号:

  1. NOT : !
  2. AND : &&
  3. OR : ||
  4. XOR : ^

前三个和很常见,而 XOR(异或) 则是稍微少见一点点,简单的理解就是 异或: 比较的两者不相同(有且仅有一个为真)

例如:
true ^ true = false
false ^ false = false
true ^ false = true
false ^ true = true

二进制

数字电子电路中,逻辑门的实现直接应用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制

用两种状态来表示信息(true/false)

采用原因:

  • 在电路中比较容易实现
  • 状态稳定
  • 有着现有的逻辑学使用(布尔代数)

通常采用 1 & 0 作为 true & false的表示。

同时二进制也可以表示其他进制的数据:

例如 263 = 2^8 + 2^2 + 2^1 + 2^0 = 100000111

二进制的计算和10进制是一样的,唯一的不同,就是 向前移位的条件不再是满10,而是满2(二进制是逢二进一)

1011 + 1001 = 10100

而这里面的每一个 1 或者 0 在计算科学中被称为 bit(位)

我们常在看到 多少位的计算机,比如 8位计算机(8-bits),这表示此计算机的操作是 8位8位 来处理的(即处理数据的时候,每个处理单位大小为 8bits)

但是 8-bits 运算能力并不算强,比如在图像处理中,8-bits 也仅仅处理256种颜色,因此 8-bits 画面是不如 24-bits画面清晰

因为 8-bits 属于比较基础的位数,所以通常将 8-bits 成为 byte(字节)

8-bits == 1 byte

1 KB == 2^10 bytes = 1024 bytes

在计算机中,信息使用二进制来表示:

举个例子,我们平时文字所谓的编码(比如Unicode之类),其实原理上就是一张表,表中为每一个我们会用到的字符都编上了号码,同时这个号码都使用二进制来表示。同时这张表都存在于我们的计算机中。

假设一张表中,我 爱 你 三个字的标号为 1 2 3,那么一个人通过计算机发送“我爱你”给另一个人的时候,实际上传送的信息为 00000001 00000010 00000011,当出现收到这个二进制码后,通过二进制码找到自己计算机中表中的内容,然后将内容显示出来:”我爱你”.

ALU (算数逻辑单元)

算术逻辑单元(英语:Arithmetic Logic Unit, ALU)是中央处理器的执行单元,是所有中央处理器的核心组成部分,由 与门 和 或门 构成的算数逻辑单元,主要功能是进行二进制的算术运算,如加减乘(不包括整数除法)。基本上,在所有现代CPU体系结构中,二进制都以补码的形式来表示。

ALU有两个单元:

  • 算术单元(AU)
  • 逻辑单元(LU)

在这些单元中,通过不同的电路组合,完成对应的效果。

我们知道在二进制中,1==true , 0==false

0+0=0 1+0=1 0+1=1 这种效果的加法在电路中可以直接用 XOR 来实现。

0+0=00^0=0
1+0=11^0=1
0+1=10^1=1

至于1+1,因为在二进制中1+1 != 2而是为1+1=10,这个使用 XOR 则无法完成,通常我们使用 AND 与之配合,组成 半加器

半加器

这样,当A和B都是True时,先通过 XOR 变成 false,并保留,然后在通过 AND 得出 true,最后的结果就是 true false,也就是 10。XOR 得出 , AND 得出 进位

但是,即便是这个样子,也是不完整,因为我们可能会需要三位计算,比如: 1 + 1 + 1 = 11,这个时候,我们则需要全加器

半加器的基础上,加上一个半加器,同时用一个 OR 来判断是非需要进位,这样就构成了一个全加器

全加器全加器

当有了半加器全加器后,三位以上的加法就都可以实现了,因为前两位不需要考虑前面的进位问题,所以前两位使用半加器,之后的位相加,就直接上全加器就行了,后面有多少位就加多少个全加器

多位相加

那么,如果最后一位再次发生进位,而此时已经超出了计算机的位数呢?(比如8位计算机计算,结果出现了进位第九位的情况),那就是overflow(溢出)

通常出现了overflow(溢出),不是闪退就是卡死了。

然后在位数增多后,只能不停的加入 全加器 ,这样会让整个单元变得复杂缓慢,因此诞生了 超前进位加法器

超前进位加法器 在处理 二进制 加法能力上更快

此外,ALU 并非只有加法,通常越复杂,能力越强的ALU的功能也就越多,但是 加法 和 移位 应该是最基础和常见的功能。

整个ALU可以抽象化成下图的方式:

参考

Wikipedia

Crash Course Computer Science

Swif学习总结 World Mythology - 创世神话

Comments

Your browser is out-of-date!

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

×