計算機能夠識別的數制是二進位數,二進位數是用0和1兩個數字來表示的數,計算機的指令集也是採用二進位表示,機器語言就是用二進位數編寫程序。
可以藉助十進位數來理解二進位數。在十進位中,每一位有0、1、2、3、4、5、6、7、8、9十個數碼,因此基數為10,超過9就必須用多位數來表示,並遵循逢十進一的原則。一個任意的十進位數可以表示為:
其含義是:
其中ai(i=0,1…,n),bj(j=1,2,…,m)是0、1、2、3、4、5、6、7、8、9十個數碼中的一個。
上式中相應於每位數字的10n稱為該數字的權,其大小是以基數為底,數碼所在位置的序號為指數的整數次冪,每位數字乘以其權所得的乘積之和即為所表示數的值。
例如:
十進位是人們最熟悉、最常用的一種數制,但它不是唯一的數制。例如計時用的時、分、秒就是按60進位計數的。基數為r的r進位數可以表示為:
● 二進位和十六進位數
計算機就其本身來說是一個電器設備,為了能夠快速存儲、處理、傳遞信息,其內部採用了大量的電子元件,在這些電子元件中,電路的通和斷、電壓高低,這兩種狀態最容易實現,也最穩定、也最容易實現對電路本身的控制。計算機工程師將計算機所能表示這樣的狀態,用0,1來表示、即用二進位數表示計算機內部的所有運算和操作。二進位數運算非常簡單,計算機很容易實現,所以計算機內部都用二進位編碼進行數據的傳送和計算。
二進位的基數為2,只有0、1兩個數碼,並遵循逢二進一的原則,它的各位權是以2k表示的,因此二進位數
的值為:
其中ai,bj為0、1兩個數碼中的一個。例如:
其中數的下標表示該數的基數r,即二進位的101101與十進位的45等值。
n位的二進位數可以表示2n個數。例如:3位二進位數可以表示8個數,分別是:
而4位二進位數則能表示十進位的0 ~ 15共16個數如下:
為了方便閱讀及書寫,經常使用十六進位來表示二進位數,十六進位的基數是16,數碼為0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,其中用A,B,C,D,E,F(字母不區分大小寫)這六個字母來分別表示10,11,12,13,14,15。
按同樣的方法,可以很容易地掌握十六進位數的表示方法。例如:
在計算機程式語言中,通常用數字後面跟一個英文字母來表示該數的數制。十進位一般用D(Decimal)、二進位數用B(Binary)、十六進位用H(Hexadecimal)來表示。例如:23AH、570D、110101B、0075H,…。當然也可以用這些字母的小寫形式。
● 不同進位數的相互轉換
計算機中採用的是二進位,但用計算機解決實際問題時對數值的輸入輸出通常使用十進位,這就有一個十進位向二進位轉換或由二進位向十進位轉換的過程。也就是說,在使用計算機進行數據處理時首先必須把輸入的十進位數轉換成計算機所能接受的二進位數;計算機在運行結束後,再把二進位數轉換為人們所習慣的十進位數輸出。
1、二進位數轉換成十進位數
把二進位數轉換成十進位數就是用「按權相加法」,把二進位數首先寫成加權係數展開式,然後按十進位加法規則求和。
例:把二進位數110.11轉換成十進位數。
2、十進位數轉換為二進位數
前面「按權相加法」中,權的值在小數點左邊和小數點右邊是不一樣的。所以,十進位數轉換為二進位數時,整數和小數的轉換方法也不同,一般先把十進位數的整數部分和小數部分分別轉換後,再加以合併。
十進位整數轉換為二進位整數採用"除2取餘,逆排序"法。具體做法是:用2去除十進位整數,可以得到一個商和餘數;再用2去除商,又會得到一個商和餘數,如此進行,直到商為零時為止,然後把所有餘數按逆序排列,也就是把先得到的餘數作為二進位數的低位有效位,後得到的餘數作為二進位數的高位有效位,依次排列起來。這就是所謂「除2取餘,逆序排列」。
例:將一個十進位數25轉換為二進位數。
3、十六進位和二進位之間的轉換
由於十六進位的基數是2的冪,所以這兩種數制之間的轉換是十分容易的。一個二進位數,只要把它從低位到高位每4位組成一組,直接用十六進位數來表示就可了。
例:0011 0101 1011 1111 = 35BF
3 5 B F
反之,把十六進位數中的每一位用4位二進位數表示,就形成相應的二進位數了。
A 1 9 C
例:A19C = 1010 0001 1001 1100
4、十六進位數轉換為十進位數
同二進位數轉換十進位數相同,各位十六進位數與其對應權值的乘積之和即為與此十六進位相對應的十進位數。
例:N = BF3CH
=11*4096+15*256+3*16+12*1
=48956D
十進位數轉換為十六進位數也可使用除法進行。
二進位數是逢二進位的進位制,0、1是基本算符,計算機運算基礎採用二進位。編程過程中經常會用到十六進位,而十進位的使用非常少,這是因為十六進位和二進位有天然的聯繫:四個二進位位可以表示從0到15的數字,這剛好是1個16進位位可以表示的數據,也就是說,將二進位轉換成十六進位只要每4位進行轉換就可以了。
1、將下列二進位數轉換為十六進位數和十進位數:
(1)10101 (2)10000000 (3)11111111
2、用除法將下列十進位數轉換為二進位數和十六進位數:
(1)369 (2)10000 (3)4095
3、將下列十六進位數轉換為二進位數和十進位數:
(1)FA (2)5B (3)F234