三
进制是以3为基数的进位制,三进制数有0、1、2三个数码,逢三进一。在计算机发展的早期,采用了一种偏置了的三进制(对称三进制),有-1<一般用T表示,特殊条件下用Z或z表示>、0、1三个数码,这种三进制逢+/-2进一。
定义
三
进制是以3为
底数的进制,逢三进一、退一还三。三进制采用0、1、2三个数码,从
小数点往左依次是
个位、三位、九位、二十七位…,小数点往右依次是三分位、九分位、二十七七分位…。
计算机发展的早期,有采用一种偏置的三进制——对称三进制,对称三进制采用-1、0、1三个数码。对称三进制,能比
二进制更自然的表示整数,
绝对值比较小的整数位数比较少(省略第一非零位前面的零)。
对称三进制的逻辑通常应用于决策,比如投票有赞成、反对、弃权;交易有买进、卖出、观望,
复式记账法体现了对称三进制的思维。
SQL数据库系统采用了三值逻辑,是对称三进制的应用。
也有人设计了三进制钞票面额系统。下面有个例子采用对称三进制解决问题。
下面举一例:
三进制数是以下问题的答案:
允许在天平两端放置砝码,问N个砝码如何才能称出最多的整克物体?
答案:1.一个砝码取1克,只能称1克。
2.二个砝码取1克,3克
右盘3,左盘1。称2克
右盘3。称3克
右盘1,3。称4克
3.三个砝码取1克,3克,9克
右盘9,左盘1,3。称5克
右盘9,左盘3。称6克
右盘9,1,左盘3。称7克
右盘9,左盘1。称8克
右盘9。称9克
右盘9,1。称10克
右盘9,3,左盘1。称11克
右盘9,3。称12克
右盘9,3,1。称13克
4.四个砝码取1克,3克,9克,27克。
............
其中的1,3,9,27,81等都是三进制数的数位。
表示形式
三进制一般有两种表示形式:
一种是以0,1,2为基本字符的表示形式。例如,365在这种表示形式中的写法是111112。
一种是以-1,0,1为基本字符的表现形式。例如,365在这种表示形式中的写法是1TTTTTT(以T表示-1,
负号置于1之上的象形)。这种
表示法也被称作对称三进制或
平衡三进制。
普通三进制和对称三进制的换算。将普通三进制数中的“2”替换为1T,并进行相应的
进位计算即可转换为对称三进制。比如:112112=110110+1T01T=11T11T+10010=1TT0TTT。而对称三进制转换为普通三进制则需要进行
减法运算。1TT0TTT=1000000-110111=1000000-111000+112=112112。
对称三进制表示整数和
浮点数并不需要额外的符号位。最高非零位为1的是
正数、为T的是负数。参考二进制,对称三进制一个字节6位(+/-121)。
运算规则
加法:0+0=0,0+1=1,0+2=2,1+0=1,
1+1=2,1+2=10,2+0=2,
2+1=10,2+2=11
减法:0-0=0,1-0=1,2-1=1,1-1=0,2-1=1,10-1=2,2-2=0,10-2=1,11-2=2
乘法:0×0=0,0×1=0,0×2=0,1×0=0,1×1=1,1×2=2,2×0=0,2×1=2,2×2=11
除法:0÷1=0,1÷1=1,2÷1=2,1÷2=0.1111...
加法:T+T=T1,
T+0=T,T+1=0,0+T=T,0+0=0,0+1=1,1+T=0,1+0=1,1+1=1T
1+11=1TT,1+111=1TTT,1+1111=1TTTT,1+11111=1TTTTT,1+111111=1TTTTTT
T+TT=T11,T+TTT=T111,T+TTTT=T1111,T+TTTTT=T11111,T+TTTTTT=T111111
连续多个1和1相加,等于将加数1移至
被加数连续多个1的前面,并将被加数的连续多个1取反。
TT+TT=TT0+11=T01,T1+T1=T10+1T=TT,1T+1T=1T0+T1=11,11+11=110+TT=10T
同样两个数相加,将被加数
左移一位,加上加数的
反数即可。
需要注意的是,两个数相加,可能位数降低。比如:1TTTT+TTTT=1(五位数加四位数等于一位数)
减法:对称三级制的减法即加法,将加数取反,加到被加数上即可。
乘法:T×T=1,T×0=0,T×1=T,0×T=0,0×0=0,0×1=0,1×T=T,1×0=0,1×1=1
除法:T÷T=1,T÷1=T,0÷T=0,0÷1=0, 1÷T=T,1÷1=1
3. 对称三进制的
逻辑运算(以T<-1>为正值、1为
假值、0为
空值)
逻辑或(协调或):T∨T=T,T∨0=T,T∨1=T,0∨T=T,0∨0=0,0∨1=0,1∨T=T,1∨0=0,1∨1=1
逻辑与(断言与):T∧T=T,T∧0=0,T∧1=1,0∧T=0,0∧0=0,0∧1=1,1∧T=1,1∧0=1,1∧1=1
其他逻辑运算
逻辑或(断言或):T∨T=T,T∨0=0,T∨1=T,0∨T=0,0∨0=0,0∨1=0,1∨T=T,1∨0=0,1∨1=1
逻辑与(协调与):T∧T=T,T∧0=0,T∧1=1,0∧T=0,0∧0=0,0∧1=0,1∧T=1,1∧0=0,1∧1=1
区别
整数的三进制表示法不如
二进制那样冗长,但仍然比
十进制要长。例如,365在二进制中的写法是101101101(9个数字),在三进制中的写法是111112(6个数字)。
在三进制中表示三分之一是很方便的,不像在
十进制中,需要用
无限小数来表示。但是,二分之一、四分之一之类的分数在三进制中都是无限小数,这是因为2不是3的因子。
比较
1.对称三进制采用-1,0,1作为
基本字符,而普通三进制采用0,1,2作为基本字符。
2.对称三进制不需要符号位就能表示负数,而普通三进制需要符号位才能表示负数。
3.对称三进制乘法比较简单,移位、取非、相加就可以完成,便于处理;普通三进制,处理起来比较麻烦。
4.对称三进制在表示
自然数的时候,比普通三进制要长。
5.对称三进制在表示0.5〈10〉~1〈10〉之间的数的时候,整数部分为1,不直观;普通三进制没有这种现象。
转换方法
整数部分,一般使用长除法,用基数除待
转换数或上一步的商,求得
余数或
补数,直至最后的商为零。将各次余数从后往前排列,即为目标进制下的整数部分。小数部分,一般使用长乘法,用基数乘待转换数或上一步的积,求得整数部分,将正数部分从前往后排列,即为目标进制下的小数部分正负数需要分别处理。
例如,2356
2356/3=785余1,785/3=261余2,261/3=87,87/3=29,29/3=9余2,9/3=3,3/3=1,1/3=0余1
以上得知,2356的三进制为10020021
2十进制到对称三进制
例如,2356,
2356/3=785余1;785/3=262少1,262/3=87余1,87/3=29,29/3=10少1,10/3=3余1,3/3=1,1/3=0余1
以上得知,2356的对称三进制为101T01T1
二进制转对称三进制,也是使用
辗转相除法。因对称三进制数码可为正可为负,先行确定余数会比较方便。
确定余数时,可以将奇数位之和减去偶数位之和,对3的余数即为余数[-2即1,2即-1]。
3.1 正数
01'11'10'10,(余T添1)1111011÷11=101001
10'10'01,(余T添1)101011÷11=1110
11'10,(余T添1)1111÷11=101
1'01,(余T添1) 110÷11=10
10,(余T添1)11÷11=1…(1)
0111 1010的对称3进制为1TT TTT
3.2 负数
比如1011 1010(-70),取原码T000TT0(二进制)
T'00'0T'T0,(余T减T), T000T0T÷11=T0TTT
T'0T'
TT,(余1添T), TT000÷11=T000
T0'00,(余1添T),T00T÷11=TT
TT,(余0),T T÷11=T…(T)
1011 1010的称三进制为T0 11T
应用历史
现今的计算机都使用“
二进制”
数字系统,尽管它的计算规则非常简单,但其实“二进制”逻辑并不能完美地表达人类的真实想法。相比之下,“三进制”逻辑更接近人类大脑的
思维方式。因为在一般情况下,我们对问题的看法不是只有“真”和“假”两种答案,还有一种“不知道”。在三进制
逻辑学中,符号“1”代表“真”;符号“-1”代表“假”;符号“0”代表“不知道”。显然,这种逻辑
表达方式更符合计算机在人工智能方面的
发展趋势。它为计算机的模糊运算和自主学习提供了可能。只可惜,
电子工程师对这种非二进制的研究大都停留在表面或形式上,没有真正深入到实际应用中去。
不过,凡事都有一个例外,
三进制计算机并非没有在人类计算机发展史上出现过。其实,早在上世纪50、60年代。一批
莫斯科国立大学的研究员就设计了
人类历史上第一批三进制计算机“Сетунь”和“Сетунь 70”(“Сетунь”是莫大附近一条流入
莫斯科河的小河的名字)。
“Сетунь”小型
数字计算机的
设计计划由科学院院士С·Л·Соболев在1956年发起。这个计划的目的是为大专院校、科研院所、
设计单位和生产车间提供一种价廉物美的计算机。为此,他在莫大计算机中心成立了一个研究小组。该小组最初由9位年轻人(4名
副博士、5名学士)组成,都是工程师和程序员。С·Л·Соболев、К·А·Семендяев、М·Р·Шура-Бура和И·С·Березин是这个小组的永久成员。他们经常在一起讨论计算机架构的
最优化问题以及如何依靠现有的技术去实现它。他们甚至还设想了一些
未来计算机的发展思路。
随着技术的进步,
真空管和
晶体管等传统的计算机元器件逐渐被淘汰,取而代之的是速度更快、可靠性更好的
铁氧体磁芯和
半导体二极管。这些
电子元器件组成了一个很好的可控电流变压器,这为三进制
逻辑电路的实现提供了可能,因为电压存在着三种状态:正电压(“1”)、零电压(“0”)和
负电压(“-1”)。三进制逻辑电路非但比
二进制逻辑电路速度更快、可靠性更高,而且需要的设备和电能也更少。这些原因促成了
三进制计算机“Сетунь”的诞生。
“Сетунь”是一台带有快速
乘法器的时序计算机。小型的
铁氧体随机存储器(容量为3页,即54字)充当缓存,在主
磁鼓存储器中交换页面。这台计算机支持24条指令,其中3条为预留指令,不用。
三进制代码的一个特点是对称,即
相反数的一致性,因此它就和
二进制代码不同,不存在“
无符号数”的概念。这样,
三进制计算机的架构也要简单、稳定、经济得多。其
指令系统也更便于阅读,而且非常高效。
在这群天才青年日以继夜的开发和研制下,“Сетунь”的样机于1958年12月准备完毕。在头两年测试期,“Сетунь”几乎不需要任何调试就运行得非常顺利,它甚至能执行一些现有的程序。1960年,“Сетунь”开始公共测试。
1960年4月,“Сетунь”就顺利地通过了公测。它在不同的室温下都表现出惊人的可靠性和稳定性。它的生产和维护也比同期其它计算机要容易得多,而且应用面广,因此“Сетунь”被建议立即投入批量生产。
不幸的是,
苏联官僚对这个不属于
经济计划一部分的“科幻产物”持否定的态度。他们甚至勒令其停产。而此时,对“Сетунь”的订单却如雪片般从各方飞来,包括来自国外的订单,但10到15台的
年产量远不足以应付
市场需求,更不用说出口了。很快,计划
合作生产“Сетунь”的
捷克斯洛伐克工厂倒闭了。1965年,“Сетунь”停产了。取而代之的是一种
二进制计算机,但价格却贵出2.5倍。
“Сетунь”总共生产了50台(包括样机)。30台被安装在高等院校,其余的则在科研院所和生产车间落户。从
加里宁格勒到
雅库茨克,从
阿什哈巴德到
新西伯利亚,全苏都能看到“Сетунь”的身影。各地都对“Сетунь”的反应不错,认为它编程简单(不需要使用
汇编语言),支持反向
波兰表示法,适用于工程计算、
工业控制、计算机教学等各个领域。
有了“Сетунь”的成功经验,研究员们决定不放弃
三进制计算机的计划。他们在1970年推出了“Сетунь 70”型计算机。“Сетунь 70”对三进制的特性和概念有了进一步的完善和理解:建立了三进制
字节——“tryte”(对应于
二进制的“byte”),每个三进制字节由6个三进制位(“trit”,
约等于9.5个
二进制位“bit”)构成;
指令集符合三进制逻辑;算术指令允许更多的
操作数长——1、2和3字节(三进制),结果长度也扩展到6字节(三进制)。
对“Сетунь 70”而言,
传统计算机的“字”的概念已经不存在了。编程的过程就是对三进制运算和三进制地址的操作。这些基于三进制字节的命令将会通过对虚拟指令的编译而得到。当然,程序员们不必考虑这些——他们只需直接和操作数及参数打交道即可。
“Сетунь 70”是一台双
堆栈计算机。其回叫堆栈用来调用
子程序。这一简单的改进启发了
荷兰计算机科学家艾兹格·W·迪科斯彻,为他日后提出“
结构化程序设计”思想打下了基础。
“Сетунь 70”成了
莫斯科国立大学三进制计算机的绝唱。由于得不到上级的支持,这个科研项目不得不无限期停顿下来。