进制转换计算方法

 平时生活开发中,常见二进制、八进制、十进制、十六进制,换算方法书上都有教,真实记住的也就真正想学的!

  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 转换成八进制的过程:

进制转换计算方法_第1张图片


从图中得知,十进制数字 36926 转换成八进制的结果为 110076。

下图演示了将十进制数字 42 转换成二进制的过程:

进制转换计算方法_第2张图片

 

从图中得知,十进制数字 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 转换为八进制:

进制转换计算方法_第3张图片


从图中可以看出,二进制整数 1110111100 转换为八进制的结果为 1674。

八进制整数转换为二进制整数时,思路是相反的,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将八进制整数 2743 转换为二进制:

进制转换计算方法_第4张图片


从图中可以看出,八进制整数 2743 转换为二进制的结果为 10111100011。

2) 二进制整数和十六进制整数之间的转换

二进制整数转换为十六进制整数时,每四位二进制数字转换为一位十六进制数字,运算的顺序是从低位向高位依次进行,高位不足四位用零补齐。下图演示了如何将二进制整数 10 1101 0101 1100 转换为十六进制:

进制转换计算方法_第5张图片


从图中可以看出,二进制整数 10 1101 0101 1100 转换为十六进制的结果为 2D5C。

十六进制整数转换为二进制整数时,思路是相反的,每一位十六进制数字转换为四位二进制数字,运算的顺序也是从低位向高位依次进行。下图演示了如何将十六进制整数 A5D6 转换为二进制:

进制转换计算方法_第6张图片


从图中可以看出,十六进制整数 A5D6 转换为二进制的结果为 1010 0101 1101 0110。

在C语言编程中,二进制、八进制、十六进制之间几乎不会涉及小数的转换,所以这里我们只讲整数的转换,大家学以致用足以。另外,八进制和十六进制之间也极少直接转换,这里我们也不再讲解了。

你可能感兴趣的:(开发经验,java)