不同进制间的相互转换的理解

来源:互联网 发布:淘宝卖家客服人工服务 编辑:程序博客网 时间:2024/06/07 09:02

不同进制间的相互转换一般有两种方法,第一种是直接先确定最高位,然后逐步确定低位的数字;第二种便是先确定最低位然后在然后逐步确定到最高位下面便是对这两种方法的具体解析

本文以二进制和十进制的相互转换来说明具体道理

1、基础的铺垫

(1)同一个数字,放在不同的数位上,代表不同大小的数。例如:十进制中,百位上的1表示100,十位上的1表示10.。

(2)十进制之中,每个数都可以被拆开:123=1×100+2×10+3×1                  9876=9×1000+8×100+7×10+6×1。

(3)先问个问题:为啥相应的数位是1000、100、10、1?为啥不是4、3、2、1?答:满十进一,再满十再进一,因此要想进到第三位,得有10×10;第4位得有10×10×10

(4)这样我们就知道了,对10进制,从低位到高位,依次要乘以10^0(10的0次方,下同),10^1,10^2,10^3…这个也就是书本上给的公式

(5)把十 进制换成 二 进制,也(3)就是把10换成2
那么我们得到:对2进制,从低位到高位,依次要乘以2^0,2^1,2^2,2^3……也就是1、2、4、8、……
因此原来十进制咱们叫 十位、百位、千位……现在二进制其实是 二位、四位、八位……

2、方法一:由高位到低位的逐步判断

(1)简单的例子:

比较小的数,直接通过拆分就可以转换回去
比如13,我们数一数,1、2、4、8、16……,不能包含16了,那就只能包含8。 13-8=5,5当中有4,5-4=1
好啦,我们知道13=8+4+1接着把她对应回相应位置去,8是从低往高数的第4位,4是从低往高数的第3位,1是从低往高数的第1位
,于是13等于二进制数1101

(2)深入思考

不过以上的计算仅仅是对于二进制有效,因为对于二进制来说每一位只有0或1,所以可以直接相减一次,而对于像8进制,16进制等数,它的位置上有大于1的数字,俱不可以这样比较灭个位置比较一次就可以的

(3)集体做法

先假设每一个位置为该进制的最低数值,例如不同的是从0开始的,但是也不排除有些进制可以规定为从1开始,从低位开始不断的比较,从0开始权重就不断的乘0,从1开始权重就不断的乘以1,同时不断将给定的数值每一个对应位置的值,直到到达有一个位置上的时候,数字已经小于开始的最低数乘以该位置上的权重的时候,就结束,这样就可以确定位数

然后就开始确定每一个位置上对应的确切的值是多少了,也就是每一位最多用多少这样的数,用进行/来确定该位置上的值,然后进行%运算来确定剩余的值,用它和下一位不断的做比较以上的比较就可以确定出某个位置上的值(那么会不会计算到最低位之后还有数字剩余的情况?不可能因为位数已经确定)

(4)优点:

这种转换的方式,适用于各种进制的转换,例如进制的开始位不是0而是从1开始的转换,因为下面介绍的短除的方法,只是适用于从0开始的进制位的转换,因为模除都是要从0开始(貌似也可以,因为可以%的结果加对伊的其实位置的值 ,其实是不可以的,因为这样只是每一位的数值变了,但是其对应关系任然是对应在为普通进制的从0开始的关系,并没有产生新的关系,例如数3,假如伪二进制从1开始,那么模除的得到的数为21,而实际上为3

2、方法二:有低位到高位的 逐步确定数字

(1)简单例子

例如数123可以表示为10=1×2^3+0×2^2+1×10^1+0*10^0的形式,所以最低位可以通过%2来得到,所以因为其他位都可以被2来整除

这时减去这个%出来的数,也就是/得到的数,这时这个数为5,这个数相当于>>了1位,这是再去循环上面的过程,就可以求出对应的数值来

(2)具体做法:

将一个数%对应的进制,这时得到的结果就为最低位的数因为其他位上的数都可以被整除

这个时候/的其实就是减去%的结果的值在错对应该进制位的结果(其实上述的>>1为对应的是二进制数而言的特殊结果),结果已经除了一个对应的进制数,所以这个时候再需要除以一次就好了,而不是除以两次,而其他位上的数都可以被整除,所以同样可以得到倒数第二位上的值

以此类推就可以得到所有位上的值

  






0 0
原创粉丝点击