在講解二進制數據之前,我們先來看看我們最常用的十進制數據。
從小學讀書起,我們就開始學習數學,最簡單的加法有:
5 3 = 8;
5 5 = 10;
10 16 = 26;
看到這樣的加法算術很簡單,它隻有一個規則:
(1) 個位數與個位數相加,滿10進1;
(2) 十位數與十位數相加,滿10進1;
(3) 百位數與百位數相加,滿10進1;
...
以此類推,這種規則表示的數,我們稱為:十進制數;
表示十進制數的元素就有:
0,1,2,3,4,5,6,7,8,9
這樣的10個數值;
所以,從我們最常見的算術開始,我們了解了十進制數。它的規則就是:滿10進1;那麼,根據這個規則,我們可以定義N進制數,它的規則就是:
(1) 表示N進制數的元素,有N個符号;
(2) 數據的表示,是滿N進1;
二進制數據通過上一節的講解,我們知道二進制就是由0和1組成的數字,它表示電子設備的打開和關閉狀态。計算機中存儲的任何數據都是二進制數據。
例如十進制3這個數值,在計算機中都表示成的二進制數據是11這樣數值。如果十進制3這個數值存放到1個字節中,1個字節使用8位表示,那麼,表示的數值是 0000 0011,所以,表示8位二進制數據。
根據上面提到N進制數規則,我們定義二進制數的規則是:
(1) 表示二進制數的元素有 2 個符号,就是0和1這兩個數值;
(2) 二進制數的表示是滿2進1;
知道了二進制數據的表示方法,那麼,我們試着把十進制19這個數值的二進制數據寫出來。
把十進制數據轉換成二進制數據,使用的方法是:除2取餘法,計算過程如下:
19/2 = 9餘1
9/2 = 4餘1
4/2 = 2餘0
2/2 = 1 餘0
1/2 = 0餘1
除到商為0的時候停止;
然後,從最末尾的餘數開始往上取,得到10011這個二進制數據。所以,十進制19這個數值的二進制數據就是10011。如果把十進制19這個數值存放到1個字節的變量中,那麼,在1個字節的内存中表示為0001 0011,因為1個字節是8位,上面我們求出10011二進制數據占據了5位,那麼,剩下的高3位沒有數據填充,所以,填充0值。
所以,我們可以總結十進制轉二進制的方法:
(1) 采用除2取餘法;除到商為0的時候停止。
(2) 餘數從下往上取;
(3) 高位補零;
現在我們試着把二進制轉換為十進制。在轉換之前,我們先看看十進制表示的一個例子。例如189這樣的一個數值,在數值序列中,從右邊開始算起,從0開始計算,就有:
9在第0位,8在第1位,1在第2位,那麼,就可以表示為:
1*10^2 8*10^1 9*10^0 = 100 80 9 = 189
那麼,是十進制表示,所以,基數為10,例如第2位,就有10^2 表示10的2次方,就是10*10,這就是第2位的權重值;注意:在數學計算中,任何數的0次方,都等于1。 所以有:
1*10^2 8*10^1 9*10^0
= 1*100 8*10 9*1
= 100 80 9
= 189
所以,我們可以總結N進制數值的表示算法:
(1) 每個位置上的數值,與權重值相乘,然後求和;
(2) 權重值是N^x,表示N的x次方,x是數值在數值序列上的位置;位置從右邊開始算,從0開始;
同理,我們就把10011這個二進制轉換為十進制,也是使用相同的算法。
把10011這個數值序列解開,從右邊開始計算,第0位是1,第1位是1,第2位是0,第3位是0,第4位是1;
那麼是二進制表示,所以,基數為2,例如第3位,就有2^3的權重,就有:
1*2^4 0*2^3 0*2^2 1*2^1 1*2^0
= 16 0 0 2 1
= 19
所以,我們把19這個十進制轉換成了10011二進制數據,再把二進制數據轉換為十進制數據。
再多舉一個例子,把18 這個數值轉換為二進制表示,有:
18/2 = 9 餘 0
9/2 = 4 餘 1
4/2 = 2 餘 0
2/2 = 1 餘 0
1/2 = 0 餘 1 //除到商等于0的時候,停止計算;
然後,從下往上取餘數,得到10010二進制數據。然後,10010二進制轉換為十進制數據,有:
1*2^4 0*2^3 0*2^2 1*2^1 0*2^0
= 16 0 0 2 0
= 18
通過這些例子的分析,我們講解了二進制的表示形式和二進制與十進制數值間的相互轉換。
十六進制數據在介紹十進制數的時候,我們已經定義了N進制數,它的規則就是:
(1) 表示N進制數的元素有N個符号;
(2) 滿N進1;
那麼,十六進制數就是有16個符号表示,如下:
0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F
其中字符A表示10數值,字符B表示11數值,字符C表示12數值,字符D表示13數值,字符E表示14數值,字符F表示15數值。注意:這個字符,也可以使用小寫字符a、b、c、d、e、f表示。
在學習二進制數據的時候,我們知道,把一個十進制數據轉換N進制數據,采取除N取餘法。所以,把一個十進制數據轉換為十六進制,就是采取:除16取餘法。例如,把十進制數18這個數值,轉換為16進制,有如下的計算:
18/16 = 1 餘 2
1/16 = 0餘1
然後,從下往上取餘數,得到十六進制數12這樣的數值。但是,我們有些疑惑,當我們看到12這個數值的時候,如果不表明是十六進制,我們可能會認為是十進制數據。
所以,在計算機系統中,我們定義十六進制數,使用0x前綴表示。所以,上面計算出來的十六進制數據就可以表示為0x12。當我們看到一個數值,如果是以0x開頭,就表示這個數據是十六進制數據。
那麼,我們把十六進制數0x12數值,轉換為十進制數,算法與二進制轉換為十進制數一樣。對于0x12數值序列,第0位是2,第1位是1,所以有:
1*16^1 2*16^0
= 16 2
= 18
此時,就可以把十六進制0x12數值對應的十進制計算出來了。我們再計算一個例子,計算十進制是169的數值,轉換為十六進制,有:
169/16 = 10 餘 9
10/16 = 0 餘 10
其中,十進制10數值使用十六進制字符A表示,所以,得到的十六進制數是0xA9。注意,對于10~15的數值,在十六進制中,使用字符A~F(或者小寫字母a~f)進行表示。例如十進制15這個數值,使用十六進制表示,就是0xF。
現在,我們把0xA9這個十六進制轉換為十進制,計算方式如下:
A*16^1 9*16^0
= 10 * 16 9 * 1
= 160 9
= 169
注意,在計算的時候,十六進制的字符A表示十進制的10這個數值。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!