進位

進位計數制

進位也就是進位計數制,是人為定義的帶進位的計數方法(有不帶進位的計數方法,比如原始的結繩計數法,唱票時常用的“正”字計數法,以及類似的tally mark計數)。對於任何一種進位---X進位,就表示每一位置上的數運算時都是逢X進一位。十進位是逢十進一,十六進位是逢十六進一,二進位就是逢二進一,以此類推,x進位就是逢x進位。

名詞介紹


進位
進位
進位制/位置計數法是一種記數方式,故亦稱 進位記數法/位值計數法,可以用有限的數字元號代表所有的數值。可使用數字元號的數目稱為基數(en:radix)或底數,基數為n,即可稱n進位制,簡稱n進位。現在最常用的是十進位,通常使用10個阿拉伯數字0-9進行記數。
對於任何一個數,我們可以用不同的進位制來表示。比如:十進數57(10),可以用二進位表示為111001(2),也可以用五進位表示為212(5),也可以用八進位表示為71(8)、用十六進位表示為39(16),它們所代表的數值都是一樣的。

進位一覽


十進位

人類天然選擇了十進位。
由於人類解剖學的特點,雙手共有十根手指,故在人類自發採用的進位制中,十進位是使用最為普遍的一種。成語“屈指可數”某種意義上來說描述了一個簡單計數的場景,而原始人類在需要計數的時候,首先想到的就是利用天然的算籌——手指來進行計數。
十進位編碼幾乎就是數值本身。
數值本身是一個數學上的抽象概念。經過長期的演化、融合、選擇、淘汰,系統簡便、功能全面的十進位計數法成為人類文化中主流的計數方法,經過基礎教育的訓練,大多數的人從小就掌握了十進位計數方法。盤中放了十個蘋果,通過數蘋果我們抽象出來“十”這一數值,它在我們的腦海中就以“10”這一十進位編碼的形式存放和顯示,而不是其它的形式。從這一角度來說,十進位編碼幾乎就是數值本身。
十進位的基數為10,數碼由0-9組成,計數規律逢十進一。

二進位

二進位有兩個特點:它由兩個數碼0,1組成,二進位數運算規律是逢二進一。
為區別於其它進位,二進位數的書寫通常在數的右下方註上基數2,或加後面加B表示,其中B是英文二進位Binary的首字母。
例如:二進位數10110011可以寫成,或寫成10110011B。對於十進位數可以不加標註,或加後綴D,其中D是英文十進位Decimal的首字母D。計算機領域我們之所以採用二進位進行計數,是因為二進位具有以下優點:
1)二進位數中只有兩個數碼0和1,可用具有兩個不同穩定狀態的元器件來表示一位數碼。例如,電路中某一通路的電流的有無,某一節點電壓的高低,晶體管的導通和截止等。
2)二進位數運算簡單,大大簡化了計算中運算部件的結構。
二進位數的加法和乘法基本運演演算法則各有四條,如下:
3)二進位天然兼容邏輯運算。
但是,二進位計數在日常使用上有個不便之處,就是位數往往很長,讀寫不便,如:把十進位的100000D寫成二進位就是11000011010100000B,所以計算機領域我們實際採用的是十六進位。二進位數轉換為十六進位數時,長度縮減為原先的約四分之一,把十進位的100000寫成八進位就是303240。十六進位的一個數位可代表二進位的四個數位。這樣,十進位的100000寫成十六進位就是186A0。

四進位

四進位是以4為基數的進位制,以 0、1、2 和 3 四個數字錶示任何實數。四進位與所有固定基數的計數系統有著很多共同的屬性,比如以標準的形式表示任何實數的能力(近乎獨特),以及表示有理數與無理數的特性。有關屬性的討論可參考十進位和二進位,下面是十進位0至15與四進位與二進位的互換。
Qua (四進)Bin (二進)Dec (十進)
0000
100011
200102
300113
1001004
1101015
1201106
1301117
2010008
2110019
22101010
23101111
30110012
31110113
32111014
33111115

七進位

七進位是以7為基數的計數系統。使用數碼0-6。
七進位小數通常都是循環小數,除非分母是七的倍數。有些小數可以用有限個數字來表示,如:
十進位七進位(循環部分)
1/13 = 0.0462...
.
......
七進位的乘法表:
-12345610
112345610
224611131520
3361215212430
44111522263340
55132126344250
66152433425160
10102030405060100
在七進位中:
加法運算舉例:
1、 2、 3、
數制轉換舉例:
1、十進位的131轉化成七進位數
(七)
2、七進位數245轉化成十進位數
七進位的一個好處是,是圓周率的一個很好的近似值。

八進位

由於二進位數據的基數R較小,所以二進位數據的書寫和閱讀不方便,為此,在小型機中引入了八進位。八進位的基數,有數碼0、1、2、3、4、5、6、7,並且每個數碼正好對應三位二進位數,所以八進位能很好地反映二進位。八進位用下標8或數據後面加O表示 例如:二進位數據( 11 101 010 . 010 110 100 )2 對應八進位數據 (352.264)或352.264O。

十二進位

十二進位 長度單位一英尺等於12英寸,一先令等於12便士,就連足球比賽罰點球的英制長度也是12碼,不過這個12碼與十二進位並無關係,巧合而已。
十二進位來源:傳說是十個手指頭加兩隻腳。這是過去規定的,20世紀開始規定一打dozen為12個。
規定一打12個是一種12進位。
瑞典歷史上有一位有遠見的國王就說過,從日常應用的角度看,十二進位比十進位更方便。他生前曾設想過,在他管轄的範圍內取消十進位,而代之以十二進位。
直到2015年還能見到十二進位,比如鐘錶轉一圈12小時等等。
十進位1234567891011
十二進位123456789MN
有時十進位中的在十二進位中也用表示。

十六進位

由於二進位數在使用中位數太長,不容易記憶,所以又提出了十六進位數。
十六進位數有兩個基本特點:它由十六個數碼:數字0~9加上字母A-F組成(它們分別表示十進位數10~15),十六進位數運算規律是逢十六進一,即基數,通常在表示時用尾部標誌H或下標16以示區別,在c語言中用添加前綴0x以表示十六進位數。
例如:十六進位數4AC8可寫成(4AC8),或寫成4AC8H。

六十進位

古代人由於生產勞動的需要,要研究天文和曆法,就牽涉到時間和角度了。因為曆法需要的精確度較高,時間的單位小時,角度的單位度都嫌太大。必須進一步研究他們的小數。它們的小數都具有這樣的性質︰使,,,,等都能成為它的整數倍。以作為單位,就正好具有這個性質。譬如︰等於30個,等於20個,等於15個…這種小數的進位制在表示有些數時很方便。例如常遇到的,在十進位制中是一個無限小數,但在這種進位制中就是一個有限小數。

位權概念


對於形式化的進位表示,我們可以從0開始,對數字的各個數位進行編號,即個位起往左依次為編號0,1,2,……;對稱的,從小數點后的數位則是-1,-2,……
進行進位轉換時,我們不妨設源進位(轉換前所用進位)的基為,目標進位(轉換后所用進位)的基為,原數值的表示按數位為,在中的表示為R,則有
(由於此處不可選擇字體,說明如下:等符號中,n,2,-1等均應改為下標,而上標的冪次均用^作為前綴)
舉例:
一個十進位數110,其中百位上的1表示1個,既100,十位的1表示1個,即10,個位的0表示0個,即0。
一個二進位數110,其中高位的1表示1個,即4,低位的1表示1個,即2,最低位的0表示0個,即0。
一個十六進位數110,其中高位的1表示1個,即256,低位的1表示1個,即16,最低位的0表示0個,即0。
可見,在數制中,各位數字所表示值的大小不僅與該數字本身的大小有關,還與該數字所在的位置有關,我們稱這關係為數的位權
十進位數的位權是以10為底的冪,二進位數的位權是以2為底的冪,十六進位數的位權是以16為底的冪。數位由高向低,以降冪的方式排列。

進數轉換


1.二進位數、十六進位數轉換為十進位數(按權求和)
二進位數、十六進位數轉換為十進位數的規律是相同的。把二進位數(或十六進位數)按位權形式展開多項式和的形式,求其最後的和,就是其對應的十進位數——簡稱“按權求和”.
例如:把(1001.01)2 二進位計算。
解:(1001.01)2
把(38A.11)16轉換為十進位數
解:(38A.11)16
2.十進位數轉換為二進位數,十六進位數(除2/16取余法)
整數轉換。一個十進位整數轉換為二進位整數通常採用除二取余法,即用2連續除十進位數,直到商為0,逆序排列餘數即可得到――簡稱除二取余法.
例:將25轉換為二進位數
解:餘數1
餘數0
餘數0
餘數1
餘數1
所以
同理,把十進位數轉換為十六進位數時,將基數2轉換成16就可以了.
例:將25轉換為十六進位數
解:餘數9
餘數1
所以
3.二進位數與十六進位數之間的轉換
由於4位二進位數恰好有16個組合狀態,即1位十六進位數與4位二進位數是一一對應的。所以,十六進位數與二進位數的轉換是十分簡單的.
(1)十六進位數轉換成二進位數,只要將每一位十六進位數用對應的4位二進位數替代即可――簡稱位分四位.
例:將(4AF8B)16轉換為二進位數.
解: 4 A F 8 B
0100 1010 1111 1000 1011
所以
(2)二進位數轉換為十六進位數,分別向左,向右每四位一組,依次寫出每組4位二進位數所對應的十六進位數――簡稱四位合一位.
例:將二進位數轉換為十六進位數.
解: 0001 1101 0110
1 D 6
所以
轉換時注意最後一組不足4位時必須加0補齊4位
數制轉換的一般化
1)R進位轉換成十進位
任意R進位數據按權展開、相加即可得十進位數據。例如:
2)十進位轉換R 進位
十進位數轉換成R 進位數,須將整數部分和小數部分分別轉換.
1.整數轉換——---除R 取余法 規則:(1)用R 去除給出的十進位數的整數部分,取其餘數作為轉換后的R 進位數據的整數部分最低位數字; (2)再用R去除所得的商,取其餘數作為轉換后的R 進位數據的高一位數字; (3)重複執行(2)操作,一直到商為0結束。例如:115 轉換成 Binary數據和Hexadecimal數據(圖2-4)所以
2.小數轉換————---乘R 取整法 規則:(1)用R 去乘給出的十進位數的小數部分,取乘積的整數部分作為轉換后R 進位小數點后第一位數字; (2)再用R 去乘上一步乘積的小數部分,然後取新乘積的整數部分作為轉換后R 進位小數的低一位數字; (3)重複(2)操作,一直到乘積為0,或已得到要求精度數位為止。
3.小數轉換——整數退位法:舉例:0.321d轉成二進位,由於321不是5的倍數,用取余法、取整法可能要算很久,這時候我們可以採用整數退位法。原理如下:
n為轉成的二進位數的小數位數
:計算10進位數,取整
D→T轉成2進位數
,T退位,位數不足前端補零
舉例:
0.321轉成二進位數,保留7位
,取整數41
退位,因只有6位而要求保留7位,所以是0.0101001
用在線轉換工具校驗,正確
and、or、xor運算
所有進位的and(和)、or(或)、xor(異或)運算都要轉化為二進位進行運算,然後對齊位數,進行運算,具體的運算方法和普通的and、or、xor相同,如:,,,,,,,,。就是一般的二進位運算。
如: