mysql開啟binlog
計算機基礎之進位制轉換
一、什麼叫進位制(system)
學習進位制轉換之前,我們要先知道什麼是進位制,進位制也就是進位計數制,對於任何一種進位制——n進位制,就表示每一位置上的數運算時都是逢n進一位, 十進位制是逢十進一,二進位制是逢二進一等,以此類推,n進位制就是逢n進一位, n進位制的數可以用0~(n-1) 的數表示。
二、常見的進位制
- 十進位制
逢十進一,用0~9組成。
- 二進位制
逢二進一,由 0~1組成。
- 八進位制
逢八進一,由 0~7組成。
- 十六進位制
十六進位制是由 0-9,A-F組成,與十進位制對應起來的話就是:0-9 對應 0-9,A-F對應10-15,字母不區分大小寫。
三、進位制轉換本質
[ 進位制轉換是人們利用符號來計數的方法。進位制轉換由一組數碼符號和兩個基本因素“基數”與“位權”構成。基數是指,進位計數制中所採用的數碼(數制中用來表示“量”的符號)的個數。位權是指,進位制中每一固定位置對應的單位值。]
這一大段官方解釋可能大家看的雲裡霧裡,舉個例子:十進位制數,他的進位制基數就是十,或者你可以這樣記,進位制基數等於第一位數的位權值,十進位制數第零位數的位權值為10的0次方(個位),第一位數的位權值為10的1次方(十位),第三位數的位權值為10的2次方(百位),以此類推。
1024=1×1000+0×100+2×10+4×1
四、進位制的轉換公式
1.二進位制轉換十進位制
二進位制數第0位的權值是2的0次方,第1位的權值是2的1次方……
設有一個二進位制數:1000001001,轉換為10進製為:
豎式:
從右往左開始換算
第0位 1×2的0次方 = 1
第1位 0×2的1次方 = 0
第2位 0×2的2次方 = 0
第3位 1×2的3次方 = 8
第4位 0×2的4次方 = 0
第5位 0×2的5次方 = 0
第6位 0×2的6次方 = 0
第7位 0×2的7次方 = 0
第8位 0×2的8次方 = 0
第9位 1×2的9次方 = 512
除0以外的數字0次方都是1,但0乘以多少都是0,所以我們可以直接跳過值為0的位:
1×2的0次方 + 1×2的3次方 + 1×2的9次方 = 512
2.八進位制轉換十進位制
八進位制數 逢八進一,採用 0~7這八數來表達一個數。
八進位制數第0位的權值為8的0次方,第1位權值為8的1次方,第2位權值為8的2次方……
設有一個八進位制數:1111,轉換為10進製為:
豎式:
第0位 1×8的0次方 =1
第1位 1×8的1次方 = 8
第2位 1×8的2次方 = 64
第3位 1×8的3次方 = 512
得數:565
3.十六進位制轉換十進位制
十六進位制逢十六進一,0-9對應0-9,A-F對應10-15,字母不區分大小寫。
十六進位制數的第0位的權值為16的0次方,第1位的權值為16的1次方,第2位的權值為16的2次方……
在第N (N從0開始) 位上,如果是數 x (x大於等於0,且x小於等於15,即:F)表示的大小為 x × 16 的N次方。
設有一個八進位制數: 2AF5, 轉換為10進製為:
豎式:
第0位: 5 × 16的0次方 = 5
第1位: F × 16的0次方 = 240
第2位: A × 16的0次方 = 2560
第3位: 2 × 16的0次方 = 8192
得數: 10997
4.十進位制轉換其他進位制
以此類推十進位制轉換其他進位制
5.八進位制與二進位制的轉換
二進位制到八進位制
以11 001為例:
整數部分:從後往前每三位一組,缺位處用0填補,然後按十進位制方法進行轉化, 則:
001=1
011=3
然後我們將結果按從下往上的順序書寫就是:31,那麼這個31就是二進位制11001的八進位制形式
八進位制到二進位制
以31為例:
整數部分:從後往前每一位按十進位制轉化方式轉化為三位二進位制數,缺位處用0補充 則:
1---->001
3---->011
然後我們將結果按從下往上的順序書寫就是:11001,那麼這個11001就是八進位制31的二進位制形式
6.十六進位制與二進位制的轉換
我們先看一張表
由於1111才4位,所以我們直接記住它每一位的權值,並且是從高位往低位記:8、4、2、1。
記住8421,對於任意一個4位的二進位制數,我們都可以很快算出它對應的10進位制值。
二進位制整數轉換為十六進位制整數時,每四位二進位制數字轉換為一位十六進位制數字,運算的順序是從低位向高位依次進行,高位不足四位用零補齊,參考上表,我們很快就能得出答案。
十六進位制整數轉換為二進位制整數時,思路是相反的,每一位十六進位制數字轉換為四位二進位制數字,運算的順序也是從低位向高位依次進行,舉個例子:看到F之後,我們需知道它是15,然後15如何用8421拼湊呢,應該是8 + 4 + 2 + 1,所以為11111。
結尾
本文只記錄了基本進位制之間的相互轉換,由於在C語言程式設計中二進位制、八進位制、十六進位制之間幾乎不會涉及小數的轉換,所以這裡只講整數的轉換,並且八進位制和十六進位制之間極少直接轉換,這裡也不再講解,如果想了解更多,可以自己搜尋一些材料,另外,轉換方法是通用的,任何進位制之間的轉換都可以採用。