三進制是以3為底數的進位制,三進制數有0、1、2三個數碼,逢三進一。在計算機發展的早期,採用了一種偏置了的三進制(對稱三進制),有-1<一般用T表示>、0、1三個數碼,這種三進制逢+/-2進一。
基本介紹
- 中文名:三進制
- 類別:數學概念
- 特點:逢3進1,逢+/-2進1
- 底數:3
定義,表示形式,運算規則,區別,比較,轉換方法,套用歷史,
定義
三進制是以3為底數的進制,逢三進一、退一還三。三進制採用0、1、2三個數碼,從小數點往左依次是個位、三位、九位、廿七位…,小數點往右依次是三分位、九分位、廿七分位…。
計算機發展的早期,有採用一種偏置的三進制——對稱三進制,對稱三進制採用-1<T>、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 | 0 |
1 | 1 |
2 | 2 |
3 | 10 |
4 | 11 |
5 | 12 |
6 | 20 |
7 | 21 |
8 | 22 |
9 | 100 |
10 | 101 |
... |
表示形式
三進制一般有兩種表示形式:
一種是以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,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...
2 .對稱三進制的四則運算
加法: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=1,¬0=0,¬1=T
其他邏輯運算
邏輯或(斷言或):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
區別
1到27 | |||||||||
三進制 | 1 | 2 | 10 | 11 | 12 | 20 | 21 | 22 | 100 |
對稱三進制 | 1 | 1T | 10 | 11 | 1TT | 1T0 | 1T1 | 10T | 100 |
1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
三進制 | 101 | 102 | 110 | 111 | 112 | 120 | 121 | 122 | 200 |
對稱三進制 | 101 | 11T | 110 | 111 | 1TTT | 1TT0 | 1TT1 | 1T0T | 1T00 |
1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 | 10001 | 10010 | |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | |
三進制 | 201 | 202 | 210 | 211 | 212 | 220 | 221 | 222 | 1000 |
對稱三進制 | 1T01 | 1T1T | 1T10 | 1T11 | 10TT | 10T0 | 10T1 | 100T | 1000 |
10011 | 10100 | 10101 | 10110 | 10111 | 11000 | 11001 | 11010 | 11011 | |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 |
3的冪 | |||||
三進制 | 1 | 10 | 100 | 1 000 | 10 000 |
對稱三進制 | 1 | 10 | 100 | 1 000 | 10 000 |
1 | 11 | 1001 | 1 1011 | 101 0001 | |
1 | 3 | 9 | 27 | 81 | |
冪 | 3(0) | 3(1) | 3(2) | 3(3) | 3(4) |
三進制 | 100 000 | 1 000 000 | 10 000 000 | 100 000 000 | 1 000 000 000 |
對稱三進制 | 100 000 | 1 000 000 | 10 000 000 | 100 000 000 | 1 000 000 000 |
1111 0011 | 10 1101 1001 | 1000 1000 1011 | 1 1001 1010 0001 | 100 1100 1110 0011 | |
243 | 729 | 2 187 | 6 561 | 19 683 | |
冪 | 3(5) | 3(6) | 3(7) | 3(8) | 3(9) |
小數 | ||||||
三進制 | 0.111111111111... | 0.1 | 0.020202020202... | 0.012101210121... | 0.011111111111... | 0.010212010212... |
對稱三進制 | 0.111111111111... | 0.1 | 0.1T1T1T1T1T... | 0.1TT11TT11TT1... | 0.011111111111... | 0.0110TT0110TT... |
0.1 | 0.010101010101... | 0.01 | 0.001100110011... | 0.00101010101... | 0.001001001001... | |
0.5 | 0.333333333333... | 0.25 | 0.2 | 0.166666666666... | 0.142857142857... | |
分數 | 1/2 | 1/3 | 1/4 | 1/5 | 1/6 | 1/7 |
三進制 | 0.010101010101... | 0.01 | 0.002200220022... | 0.002110021100... | 0.002020202020... | 0.002002002002... |
對稱三進制 | 0.010101010101... | 0.01 | 0.010T010T010T... | 0.01T1101T1100... | 0.01T1T1T1T0... | 0.01T01T01T01T... |
0.001 | 0.000111000111... | 0.000110011001... | 0.000101110100... | 0.000101010101... | 0.000100111011... | |
0.125 | 0.111111111111... | 0.1 | 0.090909090909... | 0.083333333333... | 0.076923076923... | |
分數 | 1/8 | 1/9 | 1/10 | 1/11 | 1/12 | 1/13 |
比較
1.對稱三進制採用-1,0,1作為基本字元,而普通三進制採用0,1,2作為基本字元。
2.對稱三進制不需要符號位就能表示負數,而普通三進制需要符號位才能表示負數。
3.對稱三進制乘法比較簡單,移位、取非、相加就可以完成,便於處理;普通三進制,處理起來比較麻煩。
4.對稱三進制在表示自然數的時候,比普通三進制要長。
5.對稱三進制在表示0.5〈10〉~1〈10〉之間的數的時候,整數部分為1,不直觀;普通三進制沒有這種現象。
轉換方法
整數部分,一般使用長除法,用基數除待轉換數或上一步的商,求得餘數或補數,直至最後的商為零。將各次餘數從後往前排列,即為目標進制下的整數部分。小數部分,一般使用長乘法,用基數乘待轉換數或上一步的積,求得整數部分,將正數部分從前往後排列,即為目標進制下的小數部分正負數需要分別處理。
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二進制到對稱三進制
二進制轉對稱三進制,也是使用輾轉相除法。因對稱三進制數碼可為正可為負,先行確定餘數會比較方便。
確定餘數時,可以將奇數位之和減去偶數位之和,對3的餘數即為餘數[-2即1,2即-1]。
3.1 正數
比如0111 1010(十進制122)
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”(“Сетунь”是莫大附近一條流入莫斯科河的小河的名字)。
在這群天才青年日以繼夜的開發和研製下,“Сетунь”的樣機於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”而言,傳統計算機的“字”的概念已經不存在了。編程的過程就是對三進制運算和三進制地址的操作。這些基於三進制位元組的命令將會通過對虛擬指令的編譯而得到。當然,程式設計師們不必考慮這些——他們只需直接和運算元及參數打交道即可。