進位
進位計數制
進位也就是進位計數制,是人為定義的帶進位的計數方法(有不帶進位的計數方法,比如原始的結繩計數法,唱票時常用的“正”字計數法,以及類似的tally mark計數)。對於任何一種進位---X進位,就表示每一位置上的數運算時都是逢X進一位。十進位是逢十進一,十六進位是逢十六進一,二進位就是逢二進一,以此類推,x進位就是逢x進位。
進位
對於任何一個數,我們可以用不同的進位制來表示。比如:十進數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 | ||
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
10 | 0100 | 4 |
11 | 0101 | 5 |
12 | 0110 | 6 |
13 | 0111 | 7 |
20 | 1000 | 8 |
21 | 1001 | 9 |
22 | 1010 | 10 |
23 | 1011 | 11 |
30 | 1100 | 12 |
31 | 1101 | 13 |
32 | 1110 | 14 |
33 | 1111 | 15 |
七進位是以7為基數的計數系統。使用數碼0-6。
七進位小數通常都是循環小數,除非分母是七的倍數。有些小數可以用有限個數字來表示,如:
十進位 | 七進位(循環部分) |
1/13 = 0.0462... | |
. | |
... | ... |
七進位的乘法表:
- | 1 | 2 | 3 | 4 | 5 | 6 | 10 |
1 | 1 | 2 | 3 | 4 | 5 | 6 | 10 |
2 | 2 | 4 | 6 | 11 | 13 | 15 | 20 |
3 | 3 | 6 | 12 | 15 | 21 | 24 | 30 |
4 | 4 | 11 | 15 | 22 | 26 | 33 | 40 |
5 | 5 | 13 | 21 | 26 | 34 | 42 | 50 |
6 | 6 | 15 | 24 | 33 | 42 | 51 | 60 |
10 | 10 | 20 | 30 | 40 | 50 | 60 | 100 |
在七進位中:
加法運算舉例:
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。
十二進位來源:傳說是十個手指頭加兩隻腳。這是過去規定的,20世紀開始規定一打dozen為12個。
規定一打12個是一種12進位。
瑞典歷史上有一位有遠見的國王就說過,從日常應用的角度看,十二進位比十進位更方便。他生前曾設想過,在他管轄的範圍內取消十進位,而代之以十二進位。
直到2015年還能見到十二進位,比如鐘錶轉一圈12小時等等。
十進位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
十二進位 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | M | N |
有時十進位中的在十二進位中也用表示。
由於二進位數在使用中位數太長,不容易記憶,所以又提出了十六進位數。
十六進位數有兩個基本特點:它由十六個數碼:數字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相同,如:,,,,,,,,。就是一般的二進位運算。
如: