为什么计算机使用二进制,为什么它们使用只能表示高低状态的位?我正在阅读“逻辑与计算机设计基础”(由 M. Morris Mano、Charles R. Kime(作者)和 Tom Martin 合著),但不明白他们的理由:
考虑一个有 10 个值表示十进制数字的系统。在这样的系统中,可用电压(例如 0 到 1.0 伏)可以分为 10 个范围,每个范围长度为 0.1 伏。电路将在这 10 个范围内提供输出电压。电路的输入需要确定施加的电压位于 10 个范围中的哪一个范围内。如果我们希望允许电压噪声,那么对于给定的数字表示,输出电压可能被允许在 0.05 伏以下的范围内变化,并且输入之间的边界可以变化不到 0.05 伏。这将需要复杂且昂贵的电子电路,并且输出仍然可能受到制造或使用过程中发生的小“噪声”电压或电路中的小变化的干扰。
那么,如果能够准确检测 0.05v 的变化并屏蔽噪声,我们会使用具有 10 个状态的计算机吗?如果是,那么这是否只是发明一种可以检测 0.05v 变化的设备的问题?为什么不直接增加范围呢?例如,将范围设为 0-50 伏,每 5 的倍数都有一个状态(例如 0、5、10、15、...、50),并允许 +/- 2V 的噪声?
答案1
根本原因是:构建双态逻辑更容易,而 99% 的时间里任何更复杂的东西都不会带来实际优势。
事实上,这是远的构建四个各具有两种状态的存储单元(可用于存储 BCD 表示法的十进制数字)比构建一个可以存储和读出 10 种状态的单个存储单元更容易(意味着更小、更便宜、更可靠)。
是的,未来的任何技术改进都可能改善 1/10 内存。但是,同样的技术发展也可以应用于二进制电路,使其更小、更可靠、功耗更低。二进制电路的改进速度将比 1/10 电压级电路更快,因为二进制电路执行的工作从根本上来说更简单。因此 1/10 电路可以绝不跟上来。
使用更高的电压是行不通的。这会增加功耗;信号线的电压越高,辐射的噪声就越大(因此它们更有可能破坏其他信号)。事实上,我们目前运行的信号线彼此非常接近,以至于在 50 伏电压下,您不仅要担心电容耦合,还要担心电弧!现代 CPU 的趋势是使用越来越低的电压,而不是更高的电压。
此外,二进制编码虽然乍一看似乎很奇怪,但在许多方面却非常方便。二进制加法器电路的设计比使用不同电压电平的加法器(如所述)简单得多(也更可靠)。(我甚至不想考虑如何进行乘法、除法或浮点运算。)另外,无论如何,您都需要二进制数字逻辑来实现计算机处理器的其余部分。
人类更喜欢使用十进制数来与计算机打交道这一事实几乎无关紧要:二进制和十进制之间的转换只是一段简单的代码。
值得注意的是,早期有一些计算机将数字存储为十进制数字。但它们并没有使用不同的电压水平。相反,它们使用称为“环形计数器”的电路,该电路实际上是十位内存,设置成每次只有一个是“1”。(查找“dekatron”。)
后来出现了 IBM 1401 和 IBM 1620 等“十进制”计算机,但同样,它们基本上都使用二进制存储。这些位只是用来以各种方式表示十进制数字。例如,1401 使用“二进制编码的十进制”,其中一组四位用于编码每个十进制数字。这样的计算机在当时非常成功,大多数计算器仍然以这种方式工作。
简而言之,虽然十进制表示似乎更有意义,但这实际上只是因为我们作为一个文明已经习惯了十进制表示。从工程学的各个方面来看,二进制表示对计算机电路来说更有意义。(而且,如果我们更聪明一点,我们就会从小就用手指用二进制计数,我们不仅可以数到 10,还可以数到 1023!:))
答案2
您引用的文章很好地回答了您的问题,您只需要再思考一下。
使用二进制表示进行电子数据存储和传输的主要原因是电路的复杂程度和噪声裕度。
另一个重要原因是,对于数据存储而言,二进制是最低公分母。您可以高效地用二进制表示任何数据,而无需任何开销。当尝试表示非常简单的数据(例如二进制)时,使用超过 2 个状态通常会导致开销
至于你问题的最后一部分,我必须提醒你,随着电子元件行业的发展,我们正在朝着更低的电压发展,而不是更高的电压。在计算机主内存 IO 引脚上使用 50 伏电压是非常不切实际、危险和昂贵的。现代计算机内存通常使用大约 1.5V 的电压。
我推荐以下读物:
答案3
存储器基于晶体管,晶体管虽然本质上是模拟的,但以二进制方式使用并与时钟信号 (MHz) 耦合。最简单的存储器是 J/K (Q/Q') 触发器。这种由 4 个简单的 NAND 门组成的结构是数字存储的基本部分 - 它存储 1 或 0。触发器无法存储非数字或多个值。
另一个方面是时钟信号,它提供值的锁存。当值发生变化时,输出是不确定的。选择的时钟信号比输出稳定所需的时间略长。然后锁存值并继续计算。当值不能及时稳定在时钟脉冲时,错误的值会被带入,计算机崩溃。