闲来没事在b站上看李永乐老师讲的这个视频,觉得挺有意思的。这篇文章主要是记一下笔记。
本篇文章里面的数字若没有特殊指明,默认为二进制数字。
你们有没有这样的疑问:为什么计算机内部进行二进制运算,而不是十进制运算?
为解决这个问题,我们先来说说计算机内部是如何实现二进制运算的。
首先先说说常见的逻辑运算(假设我们有两个数A、B,取值范围:0 或1),以及对应的符号和电路实现(假设在电路中,用灯泡亮表示“1”,灯泡灭表示“0”)
与运算 | 或运算 | 非运算 | 异或运算 | |
---|---|---|---|---|
解释 | 对A、B进行与运算可以看做将A、B相乘,只有当A、B都为1,输出结果才为1 | 对A、B进行或运算可以看做将A、B相加,只有当A、B相加结果>=1,输出结果才为1 | 非运算针对的是单个操作数,当A为1时,输出结果为0;当A为0时,输出结果为1 | 对A、B进行异或运算,只有当A、B不同时,即A与B相加的结果必须等于1,输出结果才为1 |
符号 | ![]() | ![]() | ![]() | ![]() |
电路实现 | ![]() | ![]() | ![]() | 可以在其他三个基础上实现 |
知道上面的内容,我们试着来运算一下1+1,如下图所示,一位数加法的本质就是通过两个本位运算得到一个新的本位和一个进位。
- 那怎么才能输出新的本位呢?
我们来捋一捋逻辑,当Ai与Bi同为1或同为0,Si为0;否则Si为1。则这里就是异或运算
- 那么进位呢?
进位是只有当Ai与Bi同为1,进位Ci才为1,即就是与运算
所以一位数加法在电路上是这样实现的:
一位数加法的实现已经如此麻烦,那么如果要进行多位数加法等等运算,可想得设计一个多么庞大的电路。
而上述这一切都是在二进制下进行的,就像我们上面的说的我们在电路中,用灯泡亮表示“1”,灯泡灭表示“0”(实际上电路中高压(5V左右)代表1,低压(0V左右)代表0)已经如此困难,那么如果在电脑内部用10进制来运算的话,得多复杂啊。
计算机内部进行二进制运算降低了硬件设备设计的复杂度。
这样看来芯片的设计真的是人类智慧的体现了。