進制:是計算機中數據的一種表示方法。N進制的數能夠用0~(N-1)的數表示,超過9的用字母A-F表示。spa
10進制:用0~9的數表示,逢10進1。blog
16進制:由0~9,A~F組成,與10進制的對應關係是:0~9對應0~9;A~F對應10~15;字母不區分大小寫。io
2進制:由0~1組成table
8進制:由0~7組成原理
數據在計算機的表示,最終以二進制的形式存在,也就是常見的0101011...軟件
咱們操做計算機,實際就是使用程序和軟件在計算機上各類讀寫數據。二進制
進制越大,數的表達長度也就越短。程序
之因此使用16或8進制,而不是其餘的,諸如9或20進制,是由於二、八、16,分別是2的1次方、3次方、4次方,使得三種進制之間能夠很是直接的相互轉換方法
1.二進制轉換十進制im
要從右到左用二進制的每一個數去乘以2的相應次方,小數點後則是從左往右
例如:二進制數1101.01轉化成十進制
1101.01(2)=1*20+0*21+1*22+1*23 +0*2-1+1*2-2=1+0+4+8+0+0.25=13.25(10)
因此總結起來通用公式爲:
abcd.efg(2)=d*20+c*21+b*22+a*23+e*2-1+f*2-2+g*2-3(10)
或者用下面這種方法:
把二進制數首先寫成加權係數展開式,而後按十進制加法規則求和。這種作法稱爲"按權相加"法。
2的0次方是1(任何數的0次方都是1,0的0次方無心義)
2的1次方是2
2的2次方是4
2的3次方是8
2的4次方是16
2的5次方是32
2的6次方是64
2的7次方是128
2的8次方是256
2的9次方是512
2的10次方是1024
2的11次方是2048
2的12次方是4096
2的13次方是8192
2的14次方是16384
2的15次方是32768
2的16次方是65536
2的17次方是131072
2的18次方是262144
2的19次方是524288
2的20次方是1048576
即:
此時,1101=8+4+0+1=13
再好比:二進制數100011轉成十進制數能夠看做這樣:
數字中共有三個1 即第六位一個,第二位一個,第一位一個(從右到左),而後對應十進制數即2的0次方+2的1次方+2的5次方, 即
100011=32+0+0+0+2+1=35
2.十進制轉換二進制
如:255=(11111111)B
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
789=1100010101(B)
789/2=394 餘1 第10位
394/2=197 餘0 第9位
197/2=98 餘1 第8位
98/2=49 餘0 第7位
49/2=24 餘1 第6位
24/2=12 餘0 第5位
12/2=6 餘0 第4位
6/2=3 餘0 第3位
3/2=1 餘1 第2位
1/2=0 餘1 第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,只能餘下。
商得:
b(2^0)+c(2^1)+d(2^2)+e(2^3),再除以基數2餘下了b,以此類推。
當這個數不能再被2除時,先餘掉的a位數在原數低,然後來的餘數數位高,因此要把全部的餘數反過來寫。正好是edcba
3.十進制小數轉換爲二進制小數
十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體作法是:用2乘十進制小數,能夠獲得積,將積的整數部分取出,再用2乘餘下的小數部分,又獲得一個積,再將積的整數部分取出,如此進行,直到積中的小數部分爲零,此時0或1爲二進制的最後一位。或者達到所要求的精度爲止。
而後把取出的整數部分按順序排列起來,先取的整數做爲二進制小數的高位有效位,後取的整數做爲低位有效位。
十進制小數轉二進制
如:0.625=(0.101)B
0.625*2=1.25======取出整數部分1
0.25*2=0.5========取出整數部分0
0.5*2=1==========取出整數部分1
再如: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
原理:
關於十進制小數轉換爲二進制小數
假設一十進制小數B化爲了二進制小數0.ab的形式,一樣按權展開,得
B=a(2^-1)+b(2^-2)
由於小數部分的位權是負次冪,因此咱們只能乘2,得
2B=a+b(2^-1)
注意a變成了整數部分,咱們取整數正好是取到了a,剩下的小數部分也如此。
值得一提的是,小數部分的按權展開的數位順數正好和整數部分相反,因此沒必要反向取餘數了。
如何快速的進行 2進制,10進制,16進制 的 相互轉換
先記住二進制 的8421
首先咱們來看一個二進制數:1111,它是多少呢?
你可能還要這樣計算:1×2º+1×2¹+1×2²+1×2³=1×1+1×2+1×4+1×8=15。
咱們必須直接記住1111每一位的權值,而且是從高位往低位記,:八、四、二、1。 即,最高位的權值爲2³=8,而後依次是 2²=4,2¹=2,2º=1。
記住8 4 2 1,對於任意一個4位的二進制數,咱們均可以很快算出它對應的10進制值。
接下來咱們練習 經過 8421 的方式 進行 快速的計算 , 2,10,16進制的轉換
1111 = 8 + 4 + 2 + 1 = 15 =F
1110 = 8 + 4 + 2 + 0 = 14= E
1101 = 8 + 4 + 0 + 1 = 13= D
1100 = 8 + 4 + 0 + 0 = 12 =C
1011 = 8 + 0 + 2 + 1 = 11= B
1010 = 8 + 0 + 2 + 0 = 10 =A
1001 = 8 + 0 + 0 + 1 =9 =9
……
0001 = 0 + 0 + 0 + 1 = 1= 1
0000 = 0 + 0 + 0 + 0 = 0= 0
二進制數要轉換爲十六進制
二進制數要轉換爲十六進制,就是以4位一段,分別轉換爲十六進制。
如(上行爲二制數,下面爲對應的十六進制):
1111 1101 , 1010 0101 , 1001 1011
F D , A 5 , 9 B
16進制數轉換爲二進制數
反過來,當咱們看到 FD時,如何迅速將此16進制數轉換爲二進制數呢?
先轉換F:
看到F,咱們需知道它是15(可能你還不熟悉A~F這五個數),而後15如何用8421湊呢?應該是8 + 4 + 2 + 1,因此四位全爲1 :1111。
接着轉換D
看到D,知道它是13,13如何用8421湊呢?應該是:8 + 4 + 1,即:1101。
因此,FD轉換爲二進制數,爲:1111 1101
十進制數轉換成2進制
因爲十六進制轉換成二進制至關直接,因此,咱們須要將一個十進制數轉換成2進制數時,也能夠先轉換成16進制,而後再轉換成2進制。
好比,十進制數 1234轉換成二制數,若是要一直除以2,直接獲得2進制數,須要計算較屢次數。因此咱們能夠先除以16,獲得16進制數:
被除數 計算過程 商 餘數
1234 1234/16 77 2
77 77/16 4 13 (D)
4 4/16 0 4
結果16進製爲:4D2
而後咱們可直接寫出4D2的二進制形式:
0100
1101
0010
其中對映關係爲:
0100 – 4
1101 – D
0010 – 2
二進制數轉換成10進制數
一樣,若是一個二進制數很長,咱們須要將它轉換成10進制數時,除了前面學過的方法是,咱們還能夠先將這個二進制轉換成16進制,而後再轉換爲10進制。
下面舉例一個int類型的二進制數:
01101101 | 11100101 | 10101111 | 00011011 |
咱們按四位一組轉換爲16進制:6D E5 AF 1B
十進制轉十六進制
採餘數定理分解,例如將487710轉成十六進制:
487710÷16=30481….14(E) 30481÷16=1905….1 1905÷16=119….1 119÷16=7….7 7÷16=0….7 這樣就計到487710(10)=7711E(16)