Edited Jul 19, 2026
平衡三进制(Balanced Ternary)是一种以 3 为基数、但每位取值为 {-1, 0, +1}(而非普通三进制的 {0, 1, 2})的数制。通常用符号 {−, 0, +} 或 {T, 0, 1} 表示,其中 T 代表 −1。
基本原理
每一位的权重是 3 的幂(3⁰=1, 3¹=3, 3²=9, 3³=27…),但系数可以是负的。
一个数的值 = Σ(dᵢ × 3ⁱ),其中 dᵢ ∈ {−1, 0, +1}
例如十进制的几个数:
十进制 平衡三进制
0 0
1 +
2 +- ( 3 + (-1) = 2 )
3 +0
4 ++ ( 3 + 1 = 4 )
5 +-- ( 9 - 3 - 1 = 5 )
-1 -
-2 -+ ( -3 + 1 = -2 )
8 +0- ( 9 + 0 - 1 = 8 )
**最大优点:天然表示负数,无需符号位、补码或反码。**一个数取反只需把每位的 + 和 − 互换。
如何存储
需要三态存储单元("trit" 三进制位),每个 trit 表示 3 个状态。物理实现思路:
电压表示法(最常见)
┌──────────┬───────┐
│ 状态 │ 电压 │
├──────────┼───────┤
│ +1 │ +V │
│ 0 │ 0 │
│ -1 │ -V │
└──────────┴───────┘
也可用磁通方向、电流方向等。历史上苏联的 Setun 计算机(1958) 就是真正用平衡三进制制造的。
如何运算
加法
设计一个加法表,逢 ±3 进/借位。单位加法表:
a\b -1 0 +1
─────────────────────
-1 │ -1+T -1 0 (-1 + -1 = -2 = T-, 即进位-1, 本位+1)
0 │ -1 0 +1
+1 │ 0 +1 +1+ (+1 + +1 = +2 = +T, 即进位+1, 本位-1)
进位规则:
- 当两位相加得 +2:本位写 −1,向高位进 +1
- 当两位相加得 −2:本位写 +1,向高位进 −1
示例:计算 2 + 2 = 4,即 +- + +- :
进位: + +
+ -
+ + - ← 逐位相加再处理进位
───────────
结果: + + (= 3 + 1 = 4) ✓
减法
无需专门的减法器——先取反(+/−互换)再加法即可:
A - B = A + (−B)
−B 只需把 B 每位的 + 和 − 对调
比较 / 符号判断
只看最高非零位即可判断正负:
最高非零位是 + → 正数
最高非零位是 - → 负数
全为 0 → 零
这比二进制补码判断符号更直接。
整体结构示意
┌─────────────────────────────────────────┐
│ 三进制 CPU │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ Trit 寄存器│ ───▶ │ 三进制 ALU │ │
│ │ + 0 - + 0 │ │ (加法表 + 取反) │ │
│ └──────────┘ └──────────────────┘ │
│ ▲ │ │
│ └────────────────────┘ │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────┐
│ 三态存储 (+V / 0 / -V) │
└─────────────────────────────┘
为何理论上有吸引力
主要优势包括:负数表示对称无需补码、取反极其简单、舍入更均匀(截断即四舍五入)、信息密度上 3 接近最优基数 e≈2.718。
主要劣势是缺乏可靠廉价的三态电子元件——现代半导体天然是双稳态(开/关),三态电路成本高、抗噪差,这也是二进制最终胜出的根本原因。
需要我用具体某个数(比如你给一个十进制数)走一遍完整的加法或乘法运算过程吗?
做好了——这是一个可交互的演示页面,包含三部分:
架构图 用 SVG 画出了三进制 CPU 的结构: Trit 寄存器组、以「加法表 + 取反」为核心的 ALU、三态存储(+V/0/−V 对应 +1/0/−1),以及靠"最高非零位"判正负的控制单元。
逐步运算器 是核心——输入任意两个十进制数,选 + − × ÷,它会一步步动画展示三进制内部怎么算:
- 加法: 逐位相加,逢 ±3 进位,高亮当前位并显示进位行
- 减法: 演示 A − B = A + (−B),先把 B 每位 +/− 对调再走加法
- 乘法: 移位相加,逐位扫描乘数
- 除法: 重复减法求商和余数
每一步下方都有中文解释,可以用「上一步/下一步」反复看。+ 显示为绿色、− 为红色、0 为灰色。
速查对照表 列出常见十进制数对应的平衡三进制及其展开式。
转换逻辑我已用 −50 到 50 全程往返测试通过。你可以直接打开试试,比如输入 14 × 8 看移位相加,或 14 − 8 看取反加法的过程。
