进制转换

来源:互联网 发布:深圳知豆电动汽车租赁 编辑:程序博客网 时间:2024/06/10 13:05

进制转换,就是同一个数字的不同进位制表示。一般来说,都是10进制和其他进制之间的相互转换。

不过,这个要把正数和负数分开讨论。

先说正数

十进制转换为其他进制。很简单,转换成N进制,就一直除以N,最后把每次除完之后的余数倒序排列,再给前面补0占够32位

比如十进制20

二进制    :0B00000000_00000000_00000000_00010100

八进制    :000000000_00000000_00000000_00000024

十六进制:0X00000000_00000000_00000000_00000014

其他进制转换为十进制

从右向左每一位依次乘以N^0、N^1、...

比如十六进制0x14转换为十进制,就是4*16^0+1*16^1=20,八进制的024转换为十进制就是4*8^0+2*8^1=20,二进制的10100转换成十进制就是0*2^0+0*2^1+1*2^2+0*2^3+1*2^4=20

正数比较简单,负数就稍微麻烦点,主要就是符号的问题,二进制有个符号位,负数用补码表示,但其他进制没有符号位的概念。所以十进制负数可以借助二进制来和其他进制相互转换。

具体做法,先求出一个十进制负数的二进制表示,即它的补码,然后从右向左,如果转换为八进制,每三位直接计算出结果作为最终八进制数的一位,一直到最高位(包括符号位),最后一组不够三位的在前面补0。还是举例说明:-20,补码:0B11111111_11111111_11111111_11101100,从右向左每三位计算结果,得到八进制表示037777777754。如果转换为十六进制,每四位直接计算出结果作为最终十六进制数的一位,一直到最高位(包括符号位),最后一组不够四位的在前面补0。举例:-20,补码:0B11111111_11111111_11111111_11101100,从右向左每四位计算结果,0XFFFFFFEC。

说一说为什么八进制要三位一计算,十六进制四位一计算。

八进制逢八进一,所以八进制每一位最大是7,8的二进制是1000,减去1 就是111,这正好是三位二进制能表示的最大值,也就是三位的二进制数可以表示从0到7的数,分别为000、001、010、011、100、101、110、111,这其实就是二进制转换八进制。

同理,二进制转换十六进制也是一样。

反过来把八进制转换成二进制,就是把八进制的每一位都转换成一个三位的二进制数,十六进制转二进制就是把每一位转成一个四位的二进制数。

0 0
原创粉丝点击