c 语言 各种进制转换
计算机中常用的数的进制主要有:二进制、八进制、十六进制。
2 进制,用两个阿拉伯数字: 0、1;
8 进制,用八个阿拉伯数字: 0、1、2、3、4 、5、6、7;
10 进制,用十个阿拉伯数字: 0 到 9;
16 进制就是逢 16 进 1,但我们只有 0~9 这十个数字,所以我们用 A,B,C,D,
E,F 这五个字母来分别表示 10,11,12,13,14,15。字母不区分大小写。
以下简介各种进制之间的转换方法:
一、二进制转换十进制
例:二进制 “1101100”
1101100 ←二进制数
6543210 ←排位方法
例如二进制换算十进制的算法 :
1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20
↑ ↑
说明: 2 代表进制,后面的数是次方(从右往左数,以 0 开始)
=64+32+0+8+4+0+0
=108
二、二进制换算八进制
例:二进制的“ 10110111011”
换八进制时,从右到左,三位一组,不够补 0,即成了:
010 110 111 011
然后每组中的 3 个数分别对应 4、2、1 的状态,然后将为状态为 1 的相加,如:
010 = 2
110 = 4+2 = 6
111 = 4+2+1 = 7
011 = 2+1 = 3
结果为: 2673
三、二进制转换十六进制
十六进制换二进制的方法也类似, 只要每组 4 位,分别对应 8、4 、2、1 就行了,
如分解为:
0101 1011 1011
运算为:
0101 = 4+1 = 5
1011 = 8+2+1 = 11 (由于10 为 A,所以 11 即 B)
1011 = 8+2+1 = 11 (由于10 为 A,所以 11 即 B)
结果为: 5BB
四、二进制数转换为十进制数
二进制数第 0 位的权值是 2 的 0 次方,第 1 位的权值是 2 的 1 次方……
所以,设有一个二进制数: 0110 0100 ,转换为 10 进制为:
计算: 0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0
* 27 = 100
五、八进制数转换为十进制数
八进制就是逢 8 进 1。
八进制数采用 0 ~7 这八数来表达一个数。
八进制数第 0 位的权值为 8 的 0 次方,第 1 位权值为 8 的 1 次方,第 2 位权值为
8 的 2 次方……
所以,设有一个八进制数: 1507,转换为十进制为:
计算: 7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839
结果是,八进制数 1507 转换成十进制数为 839
六、十六进制转换十进制
例: 2AF5换算成 10 进制
直接计算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997
( 别忘了,在上面的计算中, A 表示 10,而 F 表示 15) 、
现在可以看出,所有进制换算成 10 进制,关键在于各自的权值不同。
假设有人问你,十进数 1234 为什么是 一千二百三十四?你尽可以给他这么一
个算式: 1234 = 1 * 103 + 2 * 102 + 3 * 101 + 4 * 100
十进制与二进制转换之相互算法
十进制转二进制:
用 2 辗转相除至结果为 1
将余数和最后的 1 从下向上倒序写 就是结果
例如 302
302/2 = 151 余 0
151/2 = 75 余 1
75/2 = 37 余 1
37/2 = 18 余 1
18/2 = 9 余 0
9/2 = 4 余 1
4/2 = 2 余 0
2/2 = 1 余 0
故二进制为 100