1.十进制转其他进制
1.1转二进制:
方法:
使用除2取余法,即将十进制数不断除以2,并记录每次的余数,直到商为0。然后把所有余数从下往上读就是对应的二进制数。
例如:
我有一个数字:12345678
- 12345678 ÷ 2 = 6172839 ... 余数 0
- 6172839 ÷ 2 = 3086419 ... 余数 1
- 3086419 ÷ 2 = 1543209 ... 余数 1
- 1543209 ÷ 2 = 771604 ... 余数 1
- 771604 ÷ 2 = 385802 ... 余数 0
- 385802 ÷ 2 = 192901 ... 余数 0
- 192901 ÷ 2 = 96450 ... 余数 1
- 96450 ÷ 2 = 48225 ... 余数 0
- 48225 ÷ 2 = 24112 ... 余数 1
- 24112 ÷ 2 = 12056 ... 余数 0
- 12056 ÷ 2 = 6028 ... 余数 0
- 6028 ÷ 2 = 3014 ... 余数 0
- 3014 ÷ 2 = 1507 ... 余数 0
- 1507 ÷ 2 = 753 ... 余数 1
- 753 ÷ 2 = 376 ... 余数 1
- 376 ÷ 2 = 188 ... 余数 0
- 188 ÷ 2 = 94 ... 余数 0
- 94 ÷ 2 = 47 ... 余数 0
- 47 ÷ 2 = 23 ... 余数 1
- 23 ÷ 2 = 11 ... 余数 1
- 11 ÷ 2 = 5 ... 余数 1
- 5 ÷ 2 = 2 ... 余数 1
- 2 ÷ 2 = 1 ... 余数 0
- 1 ÷ 2 = 0 ... 余数 1
现在,我们将所有的余数从最后一个开始向上排列(即逆序),得到的结果就是该十进制数的二进制表示。
因此,12345678的二进制形式是:101111000101000000111010
1.2转八进制:
方法:
方法与转二进制类似,只是这里采用的是除8取余法。
例如:
我有一个数字12345
- 12345 ÷ 8 = 1543 ... 余数 1
- 1543 ÷ 8 = 192 ... 余数 7
- 192 ÷ 8 = 24 ... 余数 0
- 24 ÷ 8 = 3 ... 余数 0
- 3 ÷ 8 = 0 ... 余数 3
现在我们将所有的余数从最后一个开始向上排列(即逆序),得到的结果就是该十进制数的八进制表示。
因此,12345的八进制形式是:30071
1.3转十六进制:
方法:
同样采用除基取余的方法,不过这次除的是16。对于大于9的余数,我们用A(10), B(11), C(12), D(13), E(14), F(15)来表示。
例如:
我有一个数字12345
- 12345 ÷ 16 = 771 ... 余数 9
- 771 ÷ 16 = 48 ... 余数 3
- 48 ÷ 16 = 3 ... 余数 0
- 3 ÷ 16 = 0 ... 余数 3
现在我们将所有的余数从最后一个开始向上排列(即逆序),得到的结果就是该十进制数的十六进制表示。
因此,12345的十六进制形式是:3039
2.二进制转其他进制
2.1转十进制
方法:
使用位权相加法。每个二进制位的值乘以其权重(从右到左,权重依次是2^0, 2^1, 2^2...),然后把所有这些值加起来.
示例:
假设二进制数是 1101
。
1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 8 + 4 + 0 + 1 = 13 (十进制)
2.2转八进制
方法:
由于23=823=8,可以将每三位二进制数直接转换成一个八进制数。如果二进制数不是3的倍数,可以在最左边补零。
示例:
假设二进制数是 110101
。
分组:011 010 1
转换:011
-> 3, 010
-> 2, 1
-> 1 (补零后为 001
-> 1)
结果:321
(八进制)
2.3十六进制
方法:
因为24=1624=16,可以将每四位二进制数直接转换成一个十六进制数。如果二进制数不是4的倍数,可以在最左边补零。
示例:
假设二进制数是 110101
。
分组:0011 0101
转换:0011
-> 3, 0101
-> 5
结果:35
(十六进制)
3.八进制转其他进制
3.1转十进制
方法:
使用位权相加法。每个八进制位的值乘以其权重(从右到左,权重依次是8^0, 8^1, 8^2...),然后把所有这些值加起来。
示例:
假设八进制数是 307
。
3 * 8^2 + 0 * 8^1 + 7 * 8^0 = 3 * 64 + 0 * 8 + 7 * 1 = 192 + 0 + 7 = 199 (十进制)
3.2转二进制
方法:
将每个八进制数字单独转化为三位二进制形式。如果需要,可以在最左边补零以确保每组都是三位。
示例:
假设八进制数是 307
。
3
-> 011
0
-> 000
7
-> 111
结果:011 000 111
或者去掉前导零后 11000111
(二进制)
3.3十六进制
方法:
通常先将八进制转换为二进制,然后再由二进制转换为十六进制。
步骤:
将八进制转换为二进制。
将得到的二进制数按每四位一组分组(从右到左),不足四位时在最左边补零。
每组二进制数转换成相应的十六进制数。
示例:
假设八进制数是 307
。
二进制形式:11000111
(如上所示)
分组:0011 0001 1100
(为了方便分组,在左侧补了两个零)
转换:0011
-> 3, 0001
-> 1, 1100
-> C
结果:31C
(十六进制)
4.十六进制转其他进制
转换到十进制
对于任何一个十六进制数,我们可以通过每一位乘以其对应的权值然后求和来得到等价的十进制数。权值是从右向左递增的16的幂次。
例如:十六进制数 1A3
转换成十进制:
1 * 16^2 + A (即10) * 16^1 + 3 * 16^0
= 1 * 256 + 10 * 16 + 3 * 1
= 256 + 160 + 3
= 419
转换到二进制
由于16是2的幂(16 = 2^4),每个十六进制位可以直接转换为4位二进制数。我们可以根据下面的对应关系来进行转换:
- 0 -> 0000
- 1 -> 0001
- 2 -> 0010
- 3 -> 0011
- 4 -> 0100
- 5 -> 0101
- 6 -> 0110
- 7 -> 0111
- 8 -> 1000
- 9 -> 1001
- A -> 1010
- B -> 1011
- C -> 1100
- D -> 1101
- E -> 1110
- F -> 1111
例如:十六进制数 1A3
转换成二进制:
1 -> 0001
A -> 1010
3 -> 0011
组合起来就是 0001 1010 0011
或者去掉前导零后为 110100011
。
转换到八进制
转换到八进制稍微复杂一点,通常的做法是先将十六进制数转换成二进制,然后再从二进制转换到八进制。因为每三位二进制正好对应一位八进制。
- 先将上面的二进制结果
110100011
按照三位一组分组(不足三位前面补零):001 101 000 110
- 然后每组转换成八进制:
- 001 -> 1
- 101 -> 5
- 000 -> 0
- 110 -> 6
- 最终结果是
1506
。