1、平衡三进制的介绍
前苏联的平衡三进制计算机,确实有着让人着迷的魅力,特别是平衡三进制,有种说不清道不明的美感;得益于它的对称性,对于负数不必使用额外的负号,使得平衡三进制在四则运算的加、减、乘法效率,会比二进制高;任可事物都有优缺点,平均三进制也不例外,但不影响欣赏它,就像那句话:“也许最美的进制是平衡三进制”————《编程的艺术 美国计算机学家高德纳著》
如果制造三进制计算机,那使用平衡三进制是比标准三进制更优的选择,正规的三进制的数字都是由 0
,1
,2
构成的,而平衡三进制的数字是由 -1
,0
,1
构成的;平衡三进制,也称为对称三进制。这是一个不太标准的 计数体系;它的基数也是 3
(因为有三个可能的值)。由于将 -1
写成数字不方便,下面将使用字母 T来代替 -1;
平衡三进制计算机逻辑应为:上(+1,表肯定)、下(-1,表否定)、偶(0,表未知),硬件电路也应该这样设计,同时在本文中+1也可以表示为符号“+”,文中-1也可以表示为符号“-”,0就是为符号0。
2、平衡三进制的整数表示
从上图可以看出所用的公式,是用表示平衡三进制的,其中N表示要求的十进制数,其中的n-1的n为平衡三进制的数字个数,如平衡三进制100T10(十进制为237)有6个数,n为6,再比如
平衡三进制111(十进制为13)有3个数,则n为3可代入公式求值;
a的i下标可取值为(-1,0,1),根据实际平衡三进制代入,T代-1、1代1、0代0;标准三进制用的是“逢三进一,退一还三”,但平衡三进制不是严格意义上的逢三进一,实际上是偏置后的逢三进一;那如何表示一个整数,下面以13, 7, 6, -6结合上述公式,举几个例子:
111(平衡三进制)=1*3^2 + 1*3^1 + 1*3^0=9+3+1=13(十进制)
1T1(平衡三进制)=1*3^2 + (-1*3^1) + 1*3^0=9-3+1=7(十进制)
1T0(平衡三进制)=1*3^2 + (-1*3^1) + 0*3^0=9-3+0=6(十进制)
T10(平衡三进制)=(-1*3^2) + 1*3^1 + 0*3^0=-9+3+0=-6(十进制)
十进制 | 平衡三进制 | 十进制 | 平衡三进制 |
0 | 0 | 0 | 0 |
1 | 1 | -1 | T |
2 | 1T | -2 | T1 |
3 | 10 | -3 | T0 |
4 | 11 | -4 | TT |
5 | 1TT | -5 | T11 |
6 | 1T0 | -6 | T10 |
7 | 1T1 | -7 | T1T |
8 | 10T | -8 | T01 |
9 | 100 | -9 | T00 |
10 | 101 | -10 | T0T |
11 | 11T | -11 | TT1 |
12 | 110 | -12 | TT0 |
13 | 111 | -13 | TTT |
3、平衡三进制的特性
- 对于任意十进制
,均有唯一对应的平衡三进制
- 当且仅当个位上的数字为零时,整数才能被3整除,它的四舍五入与截位的操作是等效的
- 这种计数体系,表示负数很容易,只需要将正数的数字倒转即可(T 变成 1,1 变成 T),如6的平衡三进制为1T0,则-6的平衡三进制为T10
- 若要判断这数的正负性,可判断数字符号的最高有效数字的值,左起第一位若非 0 而是 T 的即为负数,若是 1 的则是正数
- 若要判断这数的奇偶性,即非0位个数为奇数这个数就是奇数,反之就是偶数,如数字8和数字7,数字8为10T,有两个非0的数为偶数,数字7为1T1,有三个非0的数为奇数。
3.1标准三转成平衡的方法
平衡三进制的转转换法中,需要先写出一个给定的数 x 在标准三进制中的表示。当 x 是用标准三进制表示时,其数字的每一位都是 0、1 或 2。要转化为平衡三进制,需要从低位到高位操作
- 遇到 0 和 1,可直接跳过
- 遇到 2,当前位改为 T,下一位再加上 1
- 遇到 3,当前位改为 0,下一位再加上 1
举个例子:
把 237
转换成平衡三进制。
237(十进制)=22210(标准三进制)
0
和1
被跳过(因为在平衡三进制中允许0
和1
)2
变成 T,左边的数字加1
,得到 23T103
变成0
,左边的数字加1
,得到 30T103
变成0
,左边的数字(默认是0
)加1
,得到100T10
1
被跳过,得到100T10
最终的结果是 100T10
。
我们再把它转换回十进制:
100T10
(平衡三进制)=1*3^5 + 0 *3^4 + 0*3^3 + (-1*3^2) + 1*3^1 + 0*3^0
= 243 + 0 + 0 + -9 + 3 + 0
=237(十进制)
4、平衡三进制的加减运算
平衡三进制不是严格意义上的逢三进一,实际上是偏置后的逢三进一,所以像是1+1=2应该如何处理呢?在这平衡三进制中,只有T(-1)、0、1没有2,所以要自身扣1变为T(-1),补齐为3向前进一位,则1+1=1T;若为T(-1)+T(-1)=-2,平衡三进制没有-2,按照上述负数特性(T 变成 1,1 变成 T)推得-2为T1,也就(-1)-1,T(-1)要减去1不够减,向前面0借一位,前面一位变为T(-1),然后3-1再-1得到1,则结果为T1;然后1+0=1、T(-1)+0=T(-1)、0+0=0,同样的减法也可以转换为加法,所以统一为做加法,由此可列出下表:
Add | T | 0 | 1 |
---|---|---|---|
T | T1 | 0T | 00 |
0 | 0T | 00 | 01 |
1 | 00 | 01 | 1T |
好的,现在就可以试试平衡三进制的加法了,如:111(十进制13)+1T1(十进制7)=1T1T(十进制20),也就是从低位到高位分别相加,1+1得1T前进一得到最后为T,1+T得0再加上进的1则为1,最后1+1得1T,组合就是1T1T(十进制20);减法可以转换为加法,被减数不变,要减数取反,如:111(十进制13)-1T1(十进制7) 转化为 111(十进制13)+T1T(十进制-7)=1T0(十进制6),加法及加法转减法都很好用,非常Nices~~~
5、平衡三进制的乘法运算
平衡三进制的乘法也很简单,就像是两位十进制的数相乘,如:10*11=110,对就是这样,先分别相乘,然后相加就可以了,平衡三进制的乘法也是这样的;先是零乘任何数都为0,然后1*1与T*T结果都为1、最后是T*1或是1*T结果都为T,由此可以列出表格:
Multiply | T | 0 | 1 |
---|---|---|---|
T | 1 | 0 | T |
0 | 0 | 0 | 0 |
1 | T | 0 | 1 |
好的,现在就可以试试平衡三进制的加法了,如:1T(十进制2)*T0(十进制-3)=T10(十进制-6),先是0与1T相乘得00、然后是T与1T得到T1,最后相加得T10就是-6,很方便也很准确,就像是11与12相乘这样计算即可。
PS:以上平衡三进制加法与乘法,是看网上残留的前苏联三进制计算机的资料,理解大概就是这个意思,感觉很巧妙,只不过它用“+”代表1、“-”代表T、0就是0,比如:若表示13则为+ + +、表示-7则为- + - ,上图中也是列出加法与乘法的对照表,感兴趣可以自行去网上找找,可以找到原文的。
6、平衡三进制的优缺点
平衡三进制它最大的特性就是对称,所以利用它的对称性可以纠错,还有就是它难理解,可以是缺点也可以是优点,比如小数表示就很难看懂,但是如果那个老6用它来写加密算法或是区块链,那破解它的难度就直接上升了一个数量级了,当然没有三进制计算机,用的还是用二进制来模拟的。
7、平衡三进制计算机发展
这平衡三进制计算的发展,可以说是意义的,但也可以说是没有意义的,主要是怎么看,硬件设计就是一个非常难的事,现在计算机是不断设计并优化得来的,积累了无数人心血与他们的日夜辛劳,想重新起步很难,但也不是没有可能,它是个较新的玩意,所以如果用来写加密程序,那破解它那就要重新想了。
它是一种先进的进制,但它确实难以实现,其实可以按照前人的路走下去,即用正负电压表示三种逻辑,然后用不同的电阻来存储信息, 可以看三进制存储器 的有关信息,即ReRAM和忆阻器,这样大体上是可以实现它的底层,从而真正的弄出一台计算机出来,这种方式弄出的计算机,可用2根线轻易的控制一个马达的旋转,状态0不旋转,状态-1逆旋转,状态1正旋转,用这种思路弄的机器手易于控制,对应的肌肉运动:维持(0)、收缩(1)、放松(-1),对应的神经状态:静息(0)、兴奋(1)、抑制(-1),对应量子状态:叠加态(0)、状态1(1)、状态2(-1),都会自发的回到平衡状态0,然后根据输入切换状态,从而达到相应的效果。
前苏联三进制计算机,很有神秘的色彩,也很佩服那时的人们,在那时有限的技术,就能搞出那么牛逼的东西,更难想象是怎么实现的,确实不想让它消失在历史的长河中,但没有得到重视,就不会有发展,只有重视它才会有发展,或许才会有再次重现于世人眼中的这一天。
8、平衡三进制的基础逻辑
平衡三进制的逻辑很有特点,也很容易造成思维误区。首先是逻辑门,最基础的就是AND(与)、OR(或)、NOT(非),这三个组成了最最基础的门电路,但不是说二进制的逻辑门就是有二个输入端,所以三进制要有三个输入端,然后都有一个输出端;若陷入这思维误区,只会越想越复杂,习惯了只有True和false,只觉得它麻烦,但到后面觉得它设计的很巧。
三进制的逻辑,这个“三”并不是体现它有三个输入端,而是体现在它有三种状态,即它与二进制的逻辑门一样,有二个输入端和一个输出端;不同的地方在于,二进制只能输入输出0或1,而三进制输入输出T(-1)、0、1三种状态,这样就可以去组成三进制的逻辑门了,下图是示例表:
平衡三进制的0表示“未知”,“无关”或“二者”;平衡三进制的与门和二进制的与门相似;二进制与门两者为真就是真,任意一个为假就是假,所以也可以套用到平衡三进制上面去,如下表示:
False(T)与False(T)则为T、
False(T)与Unknown(0)则为T,一个输入是False(T)结果就定了、
False(T)与True(1)则为T;
Unknown(0)与False(T)则为T,还是因为有False(T)所以False(T)、
Unknown(0)与Unknown(0)则为0,两者都不知,则不知、
Unknown(0)与True(1)则为0,unknown可能TRUE或是FALSE,两种结果都有可能;
True(1)与False(T)则为T、
True(1)与Unknown(0)则为0,得出结果可能TRUE或是FALSE、
True(1)与True(1)则为1;
9、平衡三进制的逻辑门
平衡三进制的布尔值,有三个FALSE(T)、UNKNOWN(0)、TRUE(1),这样就有了平衡三进制的六种基础逻辑门:与、或、非、异或、合意、调和;非只用一个输入端和一个输出端,(与、或、异或、合意、调和)用二个输入端和一个输出端,或者可以用三个输入端(中间输入端与两边做布尔运算)和二个输出端;
要制作这种逻辑电路,您需要设计一个能够实现三进制逻辑的电路。以下是一个简单的概述,供参考:
1. **基本元件**:您需要使用逻辑门来实现三进制逻辑。通常,可以使用与门、或门、非门等逻辑门来实现三进制的逻辑运算。
2. **状态存储**:使用两个字节来表示三进制的三种状态。每个字节可以存储两种状态,因此使用两个字节可以表示三种状态(00、01、10)。您需要设计一个存储单元来存储这两个字节,并能够根据需要读取和更新这些状态。
3. **运算单元**:运算单元负责执行三进制的逻辑运算。这包括加法、减法、乘法、除法等运算。您可以使用逻辑门和存储单元来实现这些运算。
4. **控制单元**:控制单元负责控制整个电路的运行。它可以根据输入信号来选择执行哪种逻辑操作,并将结果输出到存储单元或其他组件。
5. **集成和连接**:设计好各个部分的逻辑电路后,将它们集成到一个整体电路中,并确保它们能够正确地连接和交互。
请注意,这只是一个简单的概述。实际制作这种逻辑电路可能需要更加深入的设计和验证工作。如果您有具体的电路设计需求或者想要更详细地了解如何制作这种逻辑电路,请咨询电子工程师或专业人士的意见。