欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击如何从零开始制造计算机?
继续前面的文章【科普】逻辑门电路-2
二进制Binary
很多人说计算机中的二进制起源于中国古典的阴阳八卦,这话不对,也对。
最早正式提出二进制的是生活在300多年前17世纪的德国数学家莱布尼茨Gottfried Wilhelm Leibniz,不是中国人。

在1703年,莱布尼茨发表了文章《论只使用符号0和1的二进制算术,兼论其用途及它赋予伏羲所使用的古老图形的意义》,正式提出二进制表示方法。
伏羲就是中国古典神话人物,补天女娲的老公。《易·系辞上》说:“河出图,洛出书,圣人则之。”这里的圣人就是伏羲,说有一日,天马载着河图从天而降,神龟背着洛书从河中浮起,伏羲观后灵感大发,从中总结出八卦阴阳图文。这里的河图我猜就是河流的弯曲走向,洛书就是龟甲纹样。

从图中我们也可以看出,八卦是用八个符号表示八个方向。每个符号很有意思,都是三横组成,有的横中间断开,有的不断。
我们把连续的横线视为1,断开的视为0,那么这八卦就是乾111、坎010、艮100、震001、巽110、离101、坤000、兑011。就是0~8数字。
二进制历史
1854年,英国数学家乔治·布尔George Boole发表了一篇里程碑式的论文,其中详细介绍了一种代数化的逻辑系统,后人称之为布尔代数。他提出的逻辑演算在后来的电子电路设计中起基础性作用。而我们现在编程里面的布尔值就是来自与此。

1937年,克劳德·香农Claude Elwood Shannon在麻省理工大学完成了其电气工程硕士学位论文,用继电器和开关实现了布尔代数和二进制算术运算。论文题为《继电器与开关电路的符号分析》(A Symbolic Analysis of Relay and Switching Circuits),其中香农的理论奠定了数字电路的理论基础,这篇论文被称为“可能是本世纪最重要、最著名的硕士学位论文”。
1937年11月,任职于贝尔实验室的乔治·斯蒂比兹发明了用继电器表示二进制的设备,它是第一台二进制电子计算机。至于图灵和冯诺依曼那其实也是后话了。
二进制运算
二进制转为十进制很简单:
就是说,二进制最右边一位代表1,右数第二位代表2,第三位代表4,第4位代表8...依次类推。几个例子如下:
- 010=0+2+0=2
- 011=0+2+1=3
- 1011=8+0+2+1=11
换做加法就是:
- 3+1=4 用二进制就是 011+001=100
- 2+11=13 二进制就是 0010+1011=1101,这里1101等于8+4+0+1
在编程语言中还有针对二进制的各种运算,在Python中对二进制数字来说可以进行各种按位运算,比如与运算符&,或运算符|,非运算符~,异或运算符^。

注意这里没有用~非运算符,因为在Python里它和我们想的不一样,而用0b1111减去a则可以得到期望的结果,这里b后面4个1是因为a也是4个数字的;后面异或^的结果省略了开头的0,完整的是0b0110,和我们期望的一致。
两位数加法器
回顾一下半加器电路:

这个电路,输如A和B,异或门输出的S就是本位的结果,与门输出的C就是进一位(左边一位)的结果。比如:
- A=0,B=1,那么,S=异或(0,1)=1,C=与(0,1)=0,结果是01即1
- A=1,B=1,那么,S=异或(1,1)=0,C=与(1,1)=1,结果是10即2
怎么扩展到两位数加法器?

这里的二进制运算格式是
比如下图显示了即
的情况:

在这里的顺序是:
- A1B1相加之后通过D1向第二位C2进位,而A2B2相加也应该是第二位C2,所以这两个结果也要走X25进行相加。
- 如果X25这次相加还会产生进位就通过D25输出到第三位C3。
- D25是输出到第三位C3的,而A2B2相加的进位也是在第三位C3的,所以它们也要通过X35相加。
- 如果X35相加之后还会进位,就输出给D35。
实际上X35这次相加是不会产生进位的,也就是说D35一定输出是0。为什么?简单说就是两个两位数相加不会得到一个四位数,这和99+99不可能得到1000一样。但从逻辑上可以这样看懂:
- 如果进位D2输出1,那么A2B2一定都是1
- 如果A2B2都是1,那么异或操作的X2一定输出0
- 如果X2输出0,而X2又是与运算D25的输入分支,所以D25一定输出0
- 如果D25输出0,它又是X35的分支,也是D35的分支,所以D35一定输出0

更多位数的加法器
从上面的两位数加法器我们可以知道,这个模式其实是可以无限扩展下去的。
首先我们简化一下图形:

下面是简化符号之后的四位数加法器:

在这里有几处使用异或逻辑代替了半加器,因为上面已经讨论到在某些情况下半加器不可能产生进位。
如果把这些半加器都展开,那么这个电路已经看起来比较复杂了,而我们日常使用的手机电脑芯片中都有数亿个晶体管互相连接而且不停地通断才实现了各种的功能。
欢迎关注我的专栏( つ•̀ω•́)つ【人工智能通识】
更多相关文章请点击如何从零开始制造计算机?
每个人的智能新时代
如果您发现文章错误,请不吝留言指正;
如果您觉得有用,请点喜欢;
如果您觉得很有用,欢迎转载~
END
网友评论