進制數及其轉換(二進制,十進制,十六進制)

數值數據是表示數量大小的數據,有多種表示方法。日常生活中一般採用十進制數進行計數和計算,但十進制數難以在計算機內直接存儲與運算。在計算機系統中,通常將十進制數作爲人機交互的媒介,而數據則以二進制數的形式存儲和運算。

計算機採用二進制的主要原因有以下幾點:

(1)易於物理實現

二進制在技術上最容易實現。這是因爲具有兩種穩定狀態的物理器件很多,如門電路的導通與截止、電壓的高與低等,而它們恰好可以對應表示“1”和“0”這兩個數碼。假如採用十進制,那麼就要製造具有10種穩定狀態的物理電路,而這是非常困難的。

 

(2)運算規則簡單

數學推導已經證明,對R進制數進行算術求和或求積運算,其運算規則各有R(R+1)/2種。如採用十進制,則R=10,就有55種求和或求積的運算規則;而採用二進制,則R=2,僅有3種求和或求積的運算規則,

以加法爲例:0+0=0,0+1=1 (1+0=1),1+1=10,因而可以大大簡化運算器等物理器件的設計。

(3)機器可靠性高

由於電壓的高和低、電流的有和無等都是一種質的變化,兩種物理狀態穩定、分明,因此,二進制碼傳輸的抗干擾能力強,鑑別信息的可靠性高。

(4)邏輯判斷方便

採用二進制後,僅有的兩個符號“1”和“0”正好可以與邏輯命題的兩個值“真”和“假”相對應,能夠方便地使用邏輯代數這一有力工具來分析和設計計算機的邏輯電路。

但是,用二進制表示一個數,其所使用的位數要比用十進制表示長得多,書寫和閱讀都不方便,也不容易理解。爲了書寫和閱讀的方便,人們通常使用十六進制來彌補二進制的這一不足。

1. 進位計數制

在人類的生產和生活中,經常要遇到數的表示問題,人們通常採用從低位向高位進位的方式來進行計數,這種表示數據的方法稱爲進位計數制。討論進位計數制要涉及到兩個基本概念:基數(Radix)和權(Weight)。

1)十進制

在進位計數制中,每個數位所用到的數碼符號的個數叫做基數。十進制是人們最熟悉的一種進位計數制,每個數位允許選用0~9共10個不同數碼中的某一個,因此十進制的基數爲10。每個數位計滿10就向高位進位,即“逢10進1”。

在一個數中,數碼在不同的數位上所表示的數值是不同的。每個數碼所表示的數值就等於該數碼本身乘以一個與它所在數位有關的常數,這個常數叫做權。例如:十進制數6543.21,數碼“6”所在數位的權爲1000,這一位所代表的數值即爲6×103=6000,“5”所在數位的權爲100,這一位所代表的數值即爲5×102=500,……。

2)二進制

計算機中信息的存儲、處理和傳送採用的都是二進制,不論是指令還是數據,或是多媒體信息(聲音、圖形、圖像等),都必須採用二進制編碼形式才能存入計算機中。

 

二進制是一種最簡單的進位計數制,它只有兩個不同的數碼:“0”和“1”,即基數爲2,逢2進1。任意數位的權是2i

3)十六進制

十六進制數的基數爲16,逢16進1,每個數位可取0,1,…,9,A,B,…,F共16個不同的數碼和符號中的任意一個,其中A~F分別表示十進制數值10~15。

既然有不同的進位計數制,那麼在給出一個數的同時,就必須指明它是哪種進制的數,例如:(1010)2、(1010)10、(1010)16 所代表的數值完全不同,如果不用下標加以標註,就會產生歧義。除了用下標表示之外,還可以用後綴字母來表示不同的數制,後綴B表示該數是二進制(Binary)數,後綴H表示該數是十六進制(Hexadecimal)數,而後綴D表示該數是十進制(Decimal)數。十進制數在書寫時可以省略後綴D,其他進制數在書寫時一般不能省略後綴。例如:有3個數分別爲375D、101B和AFEH,從後綴字母就可以知道它們分別是十進制數、二進制數和十六進制數。

2. 各種進制數之間的轉換

1)二進制數轉換爲十六進制數

將一個二進制數轉換成十六進制數的方法是將二進制數的整數部分和小數部分分別進行轉換,即以小數點爲界,整數部分從小數點開始往左數,每4位分成一組,當最左邊的數不足4位時,可根據需要在數的最左邊添加若干個“0”以補足4位;對於小數部分,從小數點開始往右數,每4位分成一組,當最右邊的數不足4位時,可根據需要在數的最右邊添加若干個“0”以補足4位,最終使二進制數的總的位數是4的倍數,然後用相應的十六進制數取而代之。

例如:

111011.1010011011B = 0011 1011.1010 0110 1100B = 3B.A6CH

2)十六進制數轉換爲二進制數

要將十六進制數轉換成二進制數,只要將1位十六進制數寫成4位二進制數,然後將整數部分最左邊的“0”和小數部分最右邊的“0”去掉即可。

例如:

3B.328H = 0011 1011.0011 0010 1000B = 111011.001100101B

3)二進制數轉換爲十進制數

要將一個二進制數轉換成十進制數,只要把二進制數的各位數碼與它們的權相乘,再把乘積相加,就得到對應的十進制數,這種方法稱爲按權展開相加法。

例如:

100011.1011B = 1×25 + 1×21 + 1×20 + 1×2-1 + 1×2-3 + 1×2-4= 35.6875D

4)十進制數轉換爲二進制數

要將一個十進制數轉換成二進制數,通常採用的方法是基數乘除法。這種轉換方法是對十進制數的整數部分和小數部分分別進行處理,整數部分用除基取餘法,小數部分用乘基取整法,最後將它們拼接起來即可。

(1)十進制整數轉換爲二進制整數(除基取餘法)

十進制整數轉換爲二進制整數的規則是:除以基數(2)取餘數,先得到的餘數爲低位,後得到的餘數爲高位。

具體的做法是:用2連續去除十進制整數,直到商等於0爲止,然後按逆序排列每次的餘數(先取得的餘數爲低位),便得到與該十進制數相對應的二進制數各位的數值。

例如,將175D轉換成二進制數:

212.gif

所以,175D=10101111B

(2)十進制小數轉換爲二進制小數(乘基取整法)

十進制小數轉換爲二進制小數的規則是:乘以基數(2)取整數,先得到的整數爲高位,後得到的整數爲低位。

具體的做法是:用2連續去乘十進制數的小數部分,直至乘積的小數部分等於0爲止,然後按順序排列每次乘積的整數部分(先取得的整數爲高位),便得到與該十進制數相對應的二進制數各位的數值。

例如,將0.3125D轉換成二進制數:

0.3125×2 = 0.625       … 整數0       (高位)

0.625×2  = 1.25        … 整數1

0.25×2   = 0.5         … 整數0

0.5×2    = 1.0         … 整數1       (低位)

所以,0.3125D = 0.0101B

若要將十進制數175.3125轉換成二進制數,應對整數部分和小數部分分別進行轉換,然後再進行整合:

175.3125D=10101111.0101B

需要注意的是,十進制小數常常不能準確地換算爲等值的二進制小數,存在有一定的換算誤差。

例如,將0.5627D轉換成二進制數:

0.5627×2 = 1.1254

0.1254×2 = 0.2508

0.2508×2 = 0.5016

0.5016×2 = 1.0032

0.0032×2 = 0.0064

0.0064×2 = 0.0128

……

由於小數位始終達不到0,因此這個過程會不斷進行下去。通常的做法是:根據精度要求,截取一定的數位,其誤差值小於截取的最低一位數的權。

當要求二進制數取m位小數時,一般可求m+1位,然後對最低位作“0舍1入”處理。

例如:

0.5627D = 0.100100…B

若取精度爲5位,則由於小數點後第6位爲“0”,被捨去,所以:

0.5627D = 0.10010B



轉載自:http://share.onlinesjtu.com/mod/tab/view.php?id=172

發佈了17 篇原創文章 · 獲贊 31 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章