本帖最后由 doyxy 于 2013-12-28 08:53 编辑
今天写了十进制转换为二进制,八进制,十六进制的代码,大家帮忙看下有没有什么问题呢?谢谢
主要是32行
for (int x=0; x<(32/offset+1) ; x++ )//二进制最高32位,八进制最高11位,十六进制最高8位
八进制整除不了,为这里加了1,但是这样二进制和十六进制的位数多1了,有没有什么更好的解决方法呢?
有效代码到42行,后面的是我之前写的,已经注释掉了
- class ArrayTest5
- {
- public static void main(String[] args)
- {
- toBin(-60);
- toOct(-60);
- toHex(-60);
- }
- //二进制
- public static void toBin(int num)
- {
- trans(num,1,1);
- }
- //八进制
- public static void toOct(int num)
- {
- trans(num,7,3);
- }
- //十六进制
- public static void toHex(int num)
- {
- trans(num,15,4);
- }
- //提取代码
- public static void trans(int num, int base , int offset)
- //base为被与数,二进制为1,八进制为7,十六进制为15
- //offset为右移位数,二进制为1,八进制为3,十六进制为4
- {
- char[] arr = {'0','1','2','3','4','5','6','7',
- '8','9','A','B','C','D','E','F'};
- StringBuffer sb = new StringBuffer();
- for (int x=0; x<(32/offset+1) ; x++ )//二进制最高32位,八进制最高11位,十六进制最高8位
- {
- int temp = num&base;
- sb.append(arr[temp]);
- num = num>>>offset;
- if (num==0)//右移后如果数值为0则跳出
- break;
- }
- System.out.println(sb.reverse());
- }
- /*
- //将十进制转换为二进制
- //思路:十进制转为二进制是不停模2的过程,最后一位模完为0,则可以设置当num>0时循环
- public static void toBin(int num)
- {
- StringBuffer sb = new StringBuffer();
- while (num>0)
- {
- sb.append(num%2);
- //System.out.print(num%2);
- num = num/2;
- }
- System.out.println(sb.reverse());
- }
- //十进制转换为二进制的改进,上面的代码不能转换负数
- public static void toBin_2(int num)
- {
- StringBuffer sb = new StringBuffer();
- for (int x=0; x<32 ; x++ )
- {
- int temp = num & 1;
- sb.append(temp);
- num = num>>>1;
- if (num == 0)
- break;
- }
- System.out.println(sb.reverse());
- }
- //将十进制转换为十六进制
- //思路:十进制转换为十六进制,分别取得最后4位二进制位并转换为十六进制位,即num&15;
- public static void toHex(int num)
- {
- StringBuffer sb = new StringBuffer();
- for (int x=0;x<8;x++ )
- {
- int temp = num&15;
- if (temp>9)
- //System.out.println((char)(temp-10+'A'));
- sb.append((char)(temp-10+'A'));
- else
- //System.out.println(temp);
- sb.append(temp);
- num = num>>>4;
- if (num==0)//右移4位后如果数值为0则跳出
- break;
-
-
- }
- System.out.println(sb.reverse());
- }
- //查表法:定义一个数组,即将0-F依次存入,则num&15后的值即为对应角标,输出arr[temp]即可
- public static void toHex_2(int num)
- {
- char[] arr = {'0','1','2','3','4','5','6','7',
- '8','9','A','B','C','D','E','F'};
- StringBuffer sb = new StringBuffer();
- for (int x=0; x<8 ; x++ )//8*4个二进制位,每4位一组,所以x<8
- {
- int temp = num&15;
- sb.append(arr[temp]);
- num = num>>>4;
- if (num==0)//右移4位后如果数值为0则跳出
- break;
- }
- System.out.println(sb.reverse());
- }
- */
- }
复制代码
|