常见但不完整的回答

"因为电子器件只有开和关两种状态。"这个说法不算错,但过于简化——因为造出能区分多个电平状态的器件,在工程上是可行的。

更根本的原因是抗干扰能力。

噪声容限

晶体管的输出会受温度漂移、电源波动、电磁干扰、器件老化等影响。

如果只有两个状态(低电平、高电平),我们可以把中间留出很宽的禁止区。只要信号还在允许的范围内,就能被正确判定为 0 或 1。噪声容限很大,系统极其可靠。

如果用十进制,需要把电压范围分成十档,每一档的宽度就是二状态的五分之一。噪声容限大幅缩小,误码率急剧上升。

用可靠性换取"一位能表示更多信息",在绝大多数场景下都不划算。

布尔代数提供了数学基础

1854 年,乔治·布尔(George Boole)出版《思维规律的研究》,建立了以真/假为基础的逻辑代数。

1937 年,克劳德·香农(Claude Shannon)在硕士论文中证明:布尔代数可以用继电器电路实现,并且能用来分析和综合开关电路。这把逻辑运算和电路设计联系了起来。

有了与、或、非这三种基本逻辑门,就能构造出加法器、触发器、寄存器,进而组成完整的计算系统。二进制恰好与布尔逻辑天然对应。

为什么不直接用十进制

历史上确实有过十进制计算机(如 ENIAC 的部分设计、苏联的 Сетунь 三进制计算机)。它们没有成为主流,原因包括:

  • 器件复杂度显著上升;
  • 可靠性下降;
  • 与布尔代数的理论工具不契合;
  • 二进制的生态一旦建立,转换成本极高。

有趣的是,三进制在信息表示效率上其实更接近最优(数学上最接近 e ≈ 2.718 的整数是 3),但工程复杂度的代价压倒了这点理论优势。

二进制的代价与应对

二进制表示数字很冗长(十进制的 1000 需要 10 个二进制位)。这对人类不友好,于是有了十六进制——每 4 个二进制位对应一个十六进制字符,读写都方便得多。

程序员日常看到的 0x 前缀十六进制、内存地址、颜色值(如 #FF5733),本质都是二进制的紧凑表示。

说明:本文为计算机基础原理的历史与工程解释。