先简单介绍一下将十进制转换成其他进制的思路 比如:int i=12 i在计算机中是按照二进制存放的 也就是说它是以 00000000 00000000 00000000 00001100形式存放在计算机中,要是从这个二进制的最右边开始 取n位 ,这n位二进制所表示的十进制数就是12 转换成2^n进制所表示的数的最后一位。比如:将12转换成8进制, 从12的二进制的最右边开始 取3位 既 100 ,100所表示的十进制是4 然后再取 3位 既001,001表示的十进制是1, 所以12用8进制表示就是14 要是想将12转换成16进制 就取4位 表示的十进制是12 在16进制中没有12,12对应的是c 所以12 的16进制就是c
- //将十进制转换成二进制的方法
- public String toBinary(int num)
- {
- return to(num,1,1);
- }
-
- //将十进制转换成八进制的方法
- public String toOctal(int num)
- {
- return to(num,7,3);
- }
- //将十进转换成十六进制的方法
- public String toHex(int num)
- {
- return to(num,15,4);
- }
- //这个方法是用来帮助完成进制的转换的 就是toBinary() toHex() toOctal()三个方法将公共的代码进行了封装
- public String to(int num,int set,int set1)
- {
- //如果num是0直接返回0
- if(num==0)
- {
- return "0";
- }
-
- //创建一个char数组 利用该数组完成查表操作 并为该数组赋初始值
- char[] findArr=new char[]{'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
-
- //再创建一个char数组用来存放最后转换成功的结果 因为被转换的数是int类型的 即是转换成二进制 最后的结果 最多也就可以用32个字符来表示
- char[] resultArr=new char[32];
- //定义一个指针 用来操作resultArr数组
- int pos=resultArr.length;
- //定义一个临时标变量记录 记录每一次num 与上set的值
- int temp;
-
- //利用查表法完成转换 并把结果存在resultArr数组中
- while(num!=0)
- {
- temp=num&set;
- resultArr[--pos]=findArr[temp];
- num=num>>>set1;
- }
-
- //遍历resultArr数组 将最后的结果存放在一个StringBuilder中
- StringBuilder strBuilder=new StringBuilder();
-
- for(int i=pos;i<resultArr.length;++i)
- {
- strBuilder.append(resultArr[i]);
- }
-
- //将strBuilder中的数据转成字符串返回
- return strBuilder.toString();
-
- }
复制代码
按照上面的思路 我们可以写出将十进制转换成其他进制的方法 比如:转换成4进制
public String toQuanternary(int num)
{
return to(num,3,2);
} |
|