一、數制簡介
二進位
20世紀被稱作第三次科技革命的重要標誌之一的計算機的發明與應用,其運算模式正是二進位,二進位是計算技術中廣泛採用的一種數制。二進位數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是「逢二進一」,借位規則是「借一當二」,由18世紀德國數理哲學大師萊布尼茲發現。直到20世紀30年代中期,美國科學家馮.諾依曼大膽地提出:拋棄十進位,採用二進位作為數字計算機的數制基礎。從此以後,計算機的研究飛速發展,人們把馮.諾依曼的這個理論稱為"馮.諾依曼體系機構。直到現在當前的計算機系統使用的基本上是二進位系統。
十進位十進位計數法是相對二進位計數法而言的,是我們日常使用最多的計數方法(俗稱「逢十進一」),它的定義是:「每相鄰的兩個計數單位之間的進率都是十」的計數方法,叫做「十進位計數法」。
二、轉換方法
十進位數轉換為二進位數時,由於整數和小數的轉換方法不同,所以先將十進位數的整數部分和小數部分分別轉換後,再加以合併。
註:十進位轉二進位方法:
十進位整數轉換為二進位整數採用"除2取餘,逆序排列"法。具體做法是:用2去除十進位整數,可以得到一個商和餘數;再用2去除商,又會得到一個商和餘數,如此進行,直到商為0時為止,然後把先得到的餘數作為二進位數的低位有效位,後得到的餘數作為二進位數的高位有效位,依次排列起來。也叫「倒序取餘」
案例2:
如:255(十進位)=11111111(二進位)
255/2=127=====餘1
127/2=63======餘1
63/2=31=======餘1
31/2=15=======餘1
15/2=7========餘1
7/2=3=========餘1
3/2=1=========餘1
1/2=0=========餘1
案例3:
如:789=1100010101
789/2=394.5 =1 第10位
394/2=197 =0 第9位
197/2=98.5 =1 第8位
98/2=49 =0 第7位
49/2=24.5 =1 第6位
24/2=12 =0 第5位
12/2=6 =0 第4位
6/2=3 =0 第3位
3/2=1.5 =1 第2位
1/2=0.5 =1 第1位
2、十進位小數轉二進位小數
十進位小數轉換成二進位小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進位小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,此時0或1為二進位的最後一位。或者達到所要求的精度為止。
然後把取出的整數部分按順序排列起來,先取的整數作為二進位小數的高位有效位,後取的整數作為低位有效位。
注:十進位小數轉二進位
案例1:如 0.625=(0.101)B
0.625*2=1.25======取出整數部分1
0.25*2=0.5========取出整數部分0
0.5*2=1==========取出整數部分1
案例2 如 0.7=(0.1 0110 0110...)B
0.7*2=1.4========取出整數部分1
0.4*2=0.8========取出整數部分0
0.8*2=1.6========取出整數部分1
0.6*2=1.2========取出整數部分1
0.2*2=0.4========取出整數部分0
0.4*2=0.8========取出整數部分0
0.8*2=1.6========取出整數部分1
0.6*2=1.2========取出整數部分1
0.2*2=0.4========取出整數部分0 [1]
三、轉換原理
眾所周知,二進位的基數為2,我們十進位化二進位時所除的2就是它的基數。談到它的原理,就不得不說說關於位權的概念。某進位計數制中各位數字符號所表示的數值表示該數字符號值乘一個與數字符號有關的常數,該常數稱為 「位權 」 。位權的大小是以基數為底,數字符號所處的位置的序號為指數的整數次冪。十進位數的百位、十位、個位、十分位的權分別是10的2次方、10的1次方、10的0次方,10的-1次方。二進位數就是2的n次冪。
按權展開求和正是非十進位化十進位的方法。
下面我們開講原理,舉個十進位整數轉換為二進位整數的例子,假設十進位整數A化得的二進位數為edcba 的形式,那麼用上面的方法按權展開, 得
A=a(2^0)+b(2^1)+c(2^2)+d(2^3)+e(2^4) (後面的和正是化十進位的過程)
假設該數未轉化為二進位,除以基數2得
A/2=a(2^0)/2+b(2^1)/2+c(2^2)/2+d(2^3)/2+e(2^4)/2
注意:a除不開二,餘下了!其他的絕對能除開,因為他們都包含2,而a乘的是1,他本是絕對不包含因數2,只能餘下。
商得:
(2^0)+c(2^1)+d(2^2)+e(2^3),再除以基數2餘下了b,以此類推。
當這個數不能再被2除時,先餘掉的a位數在原數低,而後來的餘數數位高,所以要把所有的餘數反過來寫。正好是edcba
關於十進位小數轉換為二進位小數
假設一十進位小數B化為了二進位小數0.ab的形式,同樣按權展開,得
B=a(2^-1)+b(2^-2)
因為小數部分的位權是負次冪,所以我們只能乘2,得
2B=a+b(2^-1)
注意a變成了整數部分,我們取整數正好是取到了a,剩下的小數部分也如此。
值得一提的是,小數部分的按權展開的數位順數正好和整數部分相反,所以不必反向取餘數了。
三、內容擴展
在我們的生活中除了二進位之外還有沒有其他的數制呢?其實在我們的生活中還有很多數制存在,比如我們的時間1小時有60分,逢60進1,也就是六十進位,比如1星期有7天,這是7進位,再比如舊時的秤一斤有16兩,他們使用的是十六進位,所以有了「半斤八兩」的說法。由於二進位數是計算機進行計算的基本進位,它能方便地通過0和1兩種狀態表示各種數值,這使得邏輯電路的設計簡潔。八進位和十六進位對二進位的轉換十分方便,同時又能將較大的二進位數以較短的字數來表示,便於人們書寫和記錄,所以使用八進位和十六進位來表達二進位數。下面我們就來說說八進位、十六進位和十進位數之間的轉換。
1、二進位和十六進位轉換
如果把四位二進位數看作一個整體,那麼剛好與十六進位的一個數對應。因此,如果從二進位數的最低位起向高位每四位一組(不足四位時補0),再把每組對應為十六進位數碼,就可以將二進位數轉化成十六進位數了
案例1:(10111101010)= 0101 1110 1010 =5EA
反過來,若將十六進位的每個數碼寫成四位的二進位數(不足四位時補0),就將十六進位數轉化成二進位數啦
案例2:(1A2B)=0001 1010 0010 1011
案例3:(ABCD)=1010 1011 1100 1101
2、八進位和十進位的轉換
案例1:八進位數56轉換為十進位數
(56)8 =5*81 +5*80 =40+5=45
案例2: 十進位數轉換為八進位數
8|79 …… 7
8|9 …… 1
8|1 …… 1↑
得出結果為:餘數取反法,即結果為117