十进制与二进制的转换分析:(小数部分另谈)
思路:
利用辗转相除法不断除以2,求余数,然后将余数倒着打印即可。
例如:将十进制的168转换为二进制,(10101000)2
分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000
通过以上例子,可以发现,通过辗转相除法可以讲十进制转换为二进制。
- public static void converBinary(int value)
- {
- StringBuilder sb = new StringBuilder();
- while(value)
- {
- int t = value % 2;
- char chTemp;
- if(t>=0 && t<=9)
- {
- chTemp = (char)(t + '0');
- }
- sb.append(chTemp);
- }
- System.out.println("二进制:" + sb.reverse());
- }
复制代码
那么,如果我们通过二进制怎么转换为十进制呢?
- public static int convertDecimal(String svalue)
- {
- int num =0,t = 0;
- char [] ch =svalue.toCharArray();
- for(int i=0;i<ch.length;i++)
- {
- if(ch[i] >= '0' && ch[i] <= '9')
- {
- t = ch[i] - '0';
- }
- num = num *2 +t; //二进制,基数乘以2
- }
- return num;
- }
复制代码
既然我们有上面的互相转换代码,我们就可以写出十进制与二进制之间的相互转换功能,那么二进制、八进制、十六进制、十进制之间如何相互转换呢,参照以上思路我们可以写出。
- public static StringBuilder convert(String srcValue,int srcHex,int tarHex)
- {
- int num =0;
- int t = 0,i=0;
- char[] ch = srcValue.toCharArray();
- for(;i<ch.length;i++)
- {
- if(ch[i]>='0' && ch[i]<='9')
- {
- t = ch[i] - '0';
- }
- else if(ch[i] >= 'A' && ch[i] <= 'F')
- {
- t = ch[i] - 'A' + 10;
- }
- num = num * srcHex + t;
- }
- i = 0;
- StringBuilder sb = new StringBuilder();
- while(num != 0)
- {
- t = num % tarHex;
- char chTemp;
- if(t>=0 && t<=9)
- {
- chTemp = (char)(t + '0');
- }
- else
- {
- chTemp = (char)(t - 10 + 'A');
- }
- sb.append(chTemp);
- num /= tarHex;
- }
- return sb;
- }
复制代码 总结:
进制转换中我们可以巧妙利用StingBuilder来实现反转,避免了遍历数组的倒序输出。
另附以为哥们的代码,供大家学习。
- //下面这三个方法分别转换成相应的进制。
- public static void toBin(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的二进制形式是:");
- trans(num,1,1);
- }
- public static void toOct(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的八进制形式是:");
- trans(num,7,3);
- }
- public static void toHex(int num,int x)
- {
- System.out.print("您输入的"+x+"进制数的十六进制形式是:");
- trans(num,15,4);
- }
-
-
- //trans():上边三个进制转换函数调用这个方法就可以完成进制的转换。
- public static void trans(int num, int base, int offset)
- {
- if(num == 0)
- {
- System.out.println(0);
- return;
- }
- char[] chs = {'0','1','2','3',
- '4','5','6','7',
- '8','9','A','B',
- 'C','D','E','F'};
- char[] arr = new char[32];
- int pos = arr.length;
- while(num != 0)
- {
- int temp = num & base;
- arr[--pos] = chs[temp];
- num = num >>> offset;
- }
- for(int i = pos; i < arr.length; i++)
- {
- System.out.print(arr[i]);
- }
- System.out.println();
- System.out.println();
- }
复制代码
|
|