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
十進制轉換為其他進制,一句話方法:整數部分——除基取余,倒序拼接余數;對於小數部分——乘基取整,正序拼接整數。
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)