进制转换问题

最近公司在招聘开发工程师,想考察一下他们的基本功和常识。问了进制转换的问题,有很多人就彻底懵逼了,其实进制转换就是高中学习的排列组合的问题。

想必大家碰见过这样的问题。有三个抽屉,现在又7种颜色的球若干。现要求每个抽屉必须放且只能放一个球,问多少种放法。其实这就是每个抽屉都有7个选择的机会,而他们相互之间是不会干扰的,所以他们的方法就是7X7X7个。而在不同的进制当中也是这样的算法,二进制每一个位置只能放0或1,任何两位上存放的数值是不会相互受影响的,所以对于n位的二进制数可以取值的个数就是2的n此幂,如果考虑符号位置以及补码算法,其取值范围就是2的n-1次幂到2的n-1次幂-1。

对于m进制的n位所表示的具体数值大小具体是多少呢?  我们完全可以利用10进制算法一样的,也就是从右相左,从0开始计数,第几位就是m的几次乘以该位上的数字,这样得到若干个数值,然后把这些数值加起来就是最终的结果。下面举一个例子:

比如  有19进制的数字 13464 . 那么这个数字应该是多少呢?

   从右向左开始计算依次为  4X(19的0次幂) 6X(19的1次幂)  4X(19的2次幂) 3X(19的3次幂)  1X(19的4次幂) 然后把这些数字加到一起就是了。

  如果已知某一个数字,我们想把他转换成某个进制的数字该怎么处理呢?只要用这个数字不断地对进制进行求余,然后把这些余数从右向左排成一行就可以了。比如我们求123的7进制。

   第一步  127 除以 7   = 17  余   4

  第二步 用 17 除以7  = 2  余   3

 第三步  2已经小于7(或2除以7 = 0 余 2 )

将上述各个余数排列起来即可。 234  就是最终的结果。

读者在学习的时候可以利用Integer 的静态方法 static String toString(int i, int radix) 和static int parseInt(String s, int radix)

去验证自己的练习结果。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值