平时生活开发中,常见二进制、八进制、十进制、十六进制,换算方法书上都有教,真实记住的也就真正想学的!
0x开头是为16进制,也是很多方向常用的计数方式,比如颜色值之类。
那么16进制换算成十进制该如何进行呢?
这里我们以0x54为例子计算一下。
0x54计算器转换之后值为84,那么84从何而来?实际上,十六进制的数是以"权"来讲的,十六进制个位数的权为个位数乘以16的
0次方,十位数的权为十位的数乘以16的1次方,以此类推,那么0x54就可以这样换算:5X16+4X1=84,即为结果。 同理8进制的权
为8,以同样的方法计算即可,8进制54换算成10进制:5X8+4X1=44,就可以得到结果。
二进制呢?当然一样!
二进制11转换:1X2+1=3,即为结果。
将十进制转换为二进制、八进制、十六进制
十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
-
将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
-
保留余数,用商继续除以 N,又得到一个新的商和余数;
-
仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
-
……
-
如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。
把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。
下图演示了将十进制数字 36926 转换成八进制的过程:
从图中得知,十进制数字 36926 转换成八进制的结果为 110076。
下图演示了将十进制数字 42 转换成二进制的过程:
从图中得知,十进制数字 42 转换成二进制的结果为 101010。
下表列出了前 17 个十进制整数与二进制、八进制、十六进制的对应关系:
十进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
二进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
八进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
十六进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
注意,十进制小数转换成其他进制小数时,结果有可能是一个无限位的小数。请看下面的例子:
-
十进制 0.51 对应的二进制为 0.100000101000111101011100001010001111010111...,是一个循环小数;
-
十进制 0.72 对应的二进制为 0.1011100001010001111010111000010100011110...,是一个循环小数;
-
十进制 0.625 对应的二进制为 0.101,是一个有限小数。
二进制和八进制、十六进制的转换
其实,任何进制之间的转换都可以使用上面讲到的方法,只不过有时比较麻烦,所以一般针对不同的进制采取不同的方法。将二进制转换为八进制和十六进制时就有非常简洁的方法,反之亦然。
1) 二进制整数和八进制整数之间的转换
二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。下图演示了如何将二进制整数 1110111100 转换为八进制:
从图中可以看出,二进制整数 1110111100 转换为八进制的结果为 1674。
八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将八进制整数 2743 转换为二进制:
从图中可以看出,八进制整数 2743 转换为二进制的结果为 10111100011。
2) 二进制整数和十六进制整数之间的转换
二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:
从图中可以看出,二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C。
十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将十六进制整数 A5D6 转换为二进制:
从图中可以看出,十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110。
在C语言编程中,二进制、八进制、十六进制之间几乎不会涉及小数的转换,所以这里我们只讲整数的转换,大家学以致用足以。另外,八进制和十六进制之间也极少直接转换,这里我们也不再讲解了。
更多推荐
进制转换计算方法
发布评论