码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础:十进制转换其他进制

时间:2015-07-30 13:12:13      阅读:212      评论:0      收藏:0      [点我收藏+]

标签:

平时使用中,进制转换只要使用Integer这个包装类中的方法即可完成。

但其实我们也能用自己的方法去实现,这有助于初学者对于计算机底层运算的理解。下面例子使用了查表形式的方法来完成的进制的转换。

在开始前,需要先理解清楚各个进制的特点还有位的概念。

 

众所周知,在计算机中,内存保存的都是二进制的数据,即通过0,1来表示数据的内容。

位(bit)就是代表二进制数据个中的每一个0或1,bit是计算机中的最小单位。

需要注意的是计算机基本存储单位是字节(byte),它用8个二进制位表示,即1 byte = 8 bit。

 

java可以支持八进制,十进制,十六进制的表示,分别是:

八进制:前置0,如用八进制表示5要写成05。

十进制:不需前置,如5就是十进制中的5.

十六进制:前置0x或者0X,如用十六进制表示5要写成0x5。

 

如果生成值为60的int类型的数据,它在内存会占用32位的空间。如下所示:

0000-0000 0000-0000 0000-0000 0011-1100

十六进制的数值用0~9和A~F这16个数来表示,当满足16,则进位。60在java中用十六进制来表示为:0x3C,在内存中表现为:

 技术分享

八进制的数值用0~7这8个数来表示,当满足8,则进位。60在java中用八进制来表示为:074,在内存中表现为:

技术分享

从以上规律可以看出,二进制中每4个位(2的4次幂=16),就表示十六进制中1个位,而要得出16进制位上的数值,可以使用位运算 & 15(二进制数1111)得出。

同理,二进制中每3个位(2的3次幂=8),就表示八进制中1个位,而要得出8进制位上的数值,可以使用位运算 & 7(二进制数111)得出。

 

基于以上的分析,可以设计一下代码:

 1 class Transform 
 2 {
 3     public static void main(String[] args) 
 4     {
 5         toHex(60);
 6         toba(60);
 7         toBin(60);
 8     }
 9 
10 //十进制转二进制
11     public static void toBin (int num)
12     {
13         trans(num,1,1);
14     }
15 
16 //十进制转八进制
17     public static void toba (int num)
18     {
19         trans(num,7,3);
20     }
21 
22 //十进制转十六进制
23     public static void toHex (int num)
24     {
25         trans(num,15,4);
26     }
27 
28 //    具体转换过程。
29 //    方法中第一个参数为需要转换的数 ,第二参数为位运算&上的数,第三个参数为要移动的二进制位。
30     public static void trans (int num,int base,int offset)
31     {
32 //        定义一个数组,角标对应数值,可以看做一个查询表。
33         char[] chs = {‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘};
34         char[] arr = new char[32];
35         int pos = arr.length;
36 
37         if(num==0)
38         {
39 //            如果要转换的数为0,则无需转换。
40             System.out.println(0);
41         }
42 
43         while(num!=0)
44         {
45 //            得出指定进制中每一位的数值,存入一个数组中。
46             int temp = num & base;
47             arr[--pos] = chs[temp];
48 //            每得出一个指定进制一个位上的值后,原数值的二进制位就往右移动指定位数,并在前面补零。
49             num = num >>> offset;      //移位补零。
50         }
51         
52         for(int x=pos;x<arr.length;x++)
53         {
54             if (x==(arr.length-1)) {
55                 System.out.println(arr[x]);                
56             } else {
57                 System.out.print(arr[x]);    
58             }
59         }
60     }
61 }

 

Java基础:十进制转换其他进制

标签:

原文地址:http://www.cnblogs.com/challengingtime/p/4688809.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!