進制轉換


1.  進制轉換

1.1 十進制化為二進制

整數部分,把十進制轉成二進制一直分解至商數為0。讀余數從下讀到上,即是二進制的整數部分數字。 小數部分,則用其乘2,取其整數部分的結果,再用計算后的小數部分依此重復計算,算到小數部分全為0為止,之后讀所有計算后整數部分的數字,從上讀到下。

將59.25(10) 轉成二進制:

  • 整數部分:


59 ÷ 2 = 29 ... 1
29 ÷ 2 = 14 ... 1
14 ÷ 2 =  7 ... 0
 7 ÷ 2 =  3 ... 1
 3 ÷ 2 =  1 ... 1
 1 ÷ 2 =  0 ... 1
  • 小數部分:

0.25 × 2 = 0.5
0.50 × 2 = 1.0
所以59.25 (10)  = 111011.01 (2) 

十進制轉換為其他進制,一句話方法:整數部分——除基取余,倒序拼接余數;對於小數部分——乘基取整,正序拼接整數

1.2 二進制化為十進制

將1001012轉換為十進制形式如下:

1001012 = [ ( 1 ) × 25 ] + [ ( 0 ) × 24 ] + [ ( 0 ) × 23 ] + [ ( 1 ) × 22 ] + [ ( 0 ) × 2 ] + [ ( 1 ) × 1 ]

1001012 = [ 1 × 32 ] + [ 0 × 16 ] + [ 0 × 8 ] + [ 1 × 4 ] + [ 0 × 2 ] + [ 1 × 1 ]

1001012 = 3710

十進制
0
1
2
3
4
5
6
7
8
9
10
二進制 0 1 10 11 100 101 110 111 1000 1001 1010
十進制 11 12 13 14 15 16 17 18 19 20 21
二進制 1011 1100 1101 1110 1111 10000 10001 10010 10011 10100 10101
十進制 22 23 24 25 26 27 28 29 30 31 32
二進制 10110 10111 11000 11001 11010 11011 11100 11101 11110 11111 100000
十進制 33 34 35 36 37 38 39 40 41 42 43
二進制 100001 100010 100011 100100 100101 100110 100111 101000 101001 101010 101011

1.3 二進制化為八進制


把二進制化為八進制也很容易,因為八進制以8為基數,8是2的冪(8=23),因此八進制的一位恰好需要三個二進制位來表示。八進制與二進制數之間的對應就是上面表格中十六進制的前八個數。二進制數000就是八進制數0,二進制數111就是八進制數7,以此類推。

八進制
二進制
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

八進制轉為二進制:

  • 658 = 110 1012
  • 178 = 001 1112

二進制轉八進制:

  • 1011002 = 101 1002 (三位一組) = 548
  • 100112 = 010 0112 (三位一組) = 238

1.4 八進制化為十進制

遵循二進制化為十進制的方法即可。所不同的是每一位乘上一個底數為8的冪。

  • 658 = (6 × 81) + (5 × 80) = (6 × 8) + (5 × 1) = 5310
  • 1278 = (1 × 82) + (2 × 81) + (7 × 80) = (1 × 64) + (2 × 8) + (7 × 1) = 8710

1.5 二進制、八進制、十六進制互相轉換

十進制
二進制
八進制
十六進制
0 0 0 0
1 1 1 1
2 10 2 2
3 11 3 3
4 100 4 4
5 101 5 5
6 110 6 6
7 111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

1.6 二進制與十六進制互相轉換

對於整數,將二進制按4位1組從右往左划分,對於小數,將二進制按4位1組從左往右划分每4位二進制對應十六進制1位,反之亦然,每1位十六進制對應4位二進制。

二進制
1
1
1
1
對應的值 8 4 2 1

也就是說,如有二進制數:10111000,計算過程如下:

將其分為兩組:1011 1000,然后按位轉化:

1011 => 8 + 2 + 1 = 11 = B

1000 => 8 = 8

所以十六進制結果是:(B8)~16~。

如果二進制位數不足4位,前補0計算,對於小數而言,方向相反。

如二進制:110111100.011001,加粗部分為所需補的0,計算過程如下:

整數部分:

將其分為三組:1 1011 1100,然后按位轉化

0001 => 1 = 1

1011 => 8+2+1 = 11 = B

1100 => 8+4 = 12 = C

小數部分:

將其分為兩組(注意方向的不同):0110 01

0110 => 4+2 = 6

0100 => 4

所以十六進制結果是:(1BC.64)~16~。

2.  位運算

2.1 取反(NOT)

取反是一元運算符,對一個二進制數的每一位執行邏輯反操作。使數字1成為0,0成為1。例如:

NOT 0111(十進制7)
 
  = 1000(十進制8)

  

許多程序設計語言取反操作符用波浪線"~"表示

2.2 按位或(OR)

按位或處理兩個長度相同的二進制數,兩個相應的二進位中只要有一個為1,該位的結果值為1。例如

   0101(十進制5)
OR 0011(十進制3)
 = 0111(十進制7) 

在C類程序設計語言中,按位或操作符是"|"。

2.3 按位異或(XOR)

按位異或運算,對等長二進制模式或二進制數的每一位執行邏輯異或操作。操作的結果是如果某位不同則該位為1,否則該位為0。例如

    0101 XOR 0011
  = 0110

在類C語言中,按位異或運算符是"^"。

2.4 按位與(AND)

按位與處理兩個長度相同的二進制數,兩個相應的二進位都為1,該位的結果值才為1,否則為0。例如:

    0101 AND 0011
  = 0001

在類C語言中,按位與用'&'表示

2.5 移位

移位是一個二元運算符,用來將一個二進制數中的每一位全部都向一個方向移動指定位,溢出的部分將被舍棄,而空缺的部分填入一定的值。在類C語言中,左移使用兩個小於符號"<<"表示,右移使用兩個大於符號">>"表示。

應用邏輯移位時,移位后空缺的部分全部填0。

   0001(十進制1) << 3(左移3位) = 1000(十進制8)
   1010(十進制10) >>    2(右移2位) = 0010(十進制2)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM