Java_数组之进制转换

  1 1,使用数组 
  2 /*
  3 进制转换 使用数组
  4 
  5 定义一个功能,打印一个十进制数转对应16进制表现形式
  6 */
  7 
  8 class ArrayTest4 
  9 {
 10     public static void main(String[] args) 
 11     {
 12         toHex(60);
 13     }
 14     /*
 15     定义一个功能,打印一个十进制数转对应16进制表现形式
 16 
 17     0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
 18     0  1  2  3  4  5  6  7  8  9   A  B   C  D  E  F
 19     48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70
 20 
 21 
 22 
 23 
 24     什么时候使用数组?
 25     当同一类型的元素较多时,就是用数组这个容器对数据进行存储
 26 
 27     */
 28     public static void toHex(int num)
 29     {
 30         //定义一个char类型的数组,用于存储每次获取到的十六进制值
 31         char[] chs=new char[8];
 32         int pos =chs.length;
 33         while(num!=0)
 34         {
 35             pos--;
 36             int temp =num & 15;
 37             if (temp>9)
 38             {
 39                 chs[pos]=(char)(temp-10+'A');
 40             }
 41             else
 42                 chs[pos]=(char)(temp-0+'0');
 43             num = num >>> 4;
 44         }
 45         System.out.println("pos="+pos);
 46         //打印数组内容
 47         for (int x=pos;x<pos ;x++ )
 48         {
 49             System.out.print(chs[x]);
 50             //  \u0000  空字符值
 51         }
 52     }
 53 }
 54 
 55 
 56 
 57 
 58 2,查表法
 59 /*
 60 进制转换  查表法
 61 
 62 定义一个功能,打印一个十进制数转对应16进制表现形式
 63 */
 64 
 65 class ArrayTest5
 66 {
 67     public static void main(String[] args) 
 68     {
 69         toHex2(60);
 70     }
 71     /*
 72     定义一个功能,打印一个十进制数转对应16进制表现形式
 73 
 74     10进制    0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
 75     16进制    0  1  2  3  4  5  6  7  8  9   A  B   C  D  E  F
 76     num-10+'A'的动作不太容易想到
 77     我们可以换另一种想法
 78     我们发现,十六进制中一共有16个元素
 79     而且没通过&15获取的数字都在15之内,都有对应的十六进制元素
 80     
 81     而且元素对应的数组,正好有规律,而且符合了数组这种容器的特点---角标
 82     
 83     那么就可以将十六进制的元素都存储到数组中
 84     将每次&15的结果作为角标去查这个数组,就可以获取到十六进制的对应的元素;
 85     
 86     这就是传说中的查表法;
 87     
 88     什么时候使用查表法呢?
 89     当元素很多,而且这些元素与数字有对应关系,而且这些数字都有角标的规律
 90     这时,优先想到查表法。
 91 
 92 二进制表 48 49 50 51 52 53 54 55 56 57 65 66 67 68 69 70
 93 
 94 
 95 
 96 
 97     什么时候使用数组?
 98     当同一类型的元素较多时,就是用数组这个容器对数据进行存储
 99 
100     */
101 
102 
103     public static void toHex2(int num)
104     {
105         //定义一个十六进制的元素的表
106         char[] arr={'0','1','2','3',
107                    '4','5','6','7',
108                    '8','9','A','B',
109                    'C','D','E','F'};
110         
111         //定义一个char类型的数组,用于存储每次获取到的十六进制值
112         char[] chs=new char[8];
113         int pos =chs.length;
114         while(num!=0)
115         {
116             int temp =num & 15;
117             chs[--pos]=arr[temp];
118             num = num >>> 4;
119         }
120         System.out.println("pos="+pos);
121         //打印数组内容
122         for (int x=pos;x<chs.length ;x++ )
123         {
124             System.out.print(chs[x]);
125             //  \u0000  空字符值
126         }
127     }
128 }
129  
130 
131 
132 
133 3 三种进制转换
134 
135 class ArrayTest6 
136 {
137     public static void main(String[] args) 
138     {
139         toBin(6);
140         toHex(26);
141         toOctal(60);
142 
143         System.out.println(Integer.toBinaryString(-6));//开发写这个
144 
145 
146         
147     }
148     //十进制--->二进制
149     public static void toBin(int num)
150     {
151         trans(num,1,1);
152     }
153 
154     //十进制--->八进制
155 
156     public static void toOctal(int num)
157     {
158         trans(num,7,3);
159     }
160 
161     //十进制--->十六进制
162 
163     public static void toHex(int num)
164     {
165         trans(num,15,4);
166     }
167 
168     public static void trans(int num,int base,int offset)
169     {
170         if (num=0)
171         {
172             System.out.println("0");
173         }
174         //定义一个十六进制的元素的表
175         char[] arr={'0','1','2','3',
176                    '4','5','6','7',
177                    '8','9','A','B',
178                    'C','D','E','F'};
179         
180         //定义一个char类型的数组,用于存储每次获取到的十六进制值
181         char[] chs=new char[32];
182         int pos =chs.length;
183         while(num!=0)
184         {
185             int temp =num & base;
186             chs[--pos]=arr[temp];
187             num = num >>> offset;
188         }
189         System.out.println("pos="+pos);
190         //打印数组内容
191         for (int x=pos;x<chs.length ;x++ )
192         {
193             System.out.print(chs[x]);
194             //  \u0000  空字符值
195         }
196     }
197 }

 

posted @ 2017-10-31 09:12  BirdieForLove  阅读(528)  评论(0编辑  收藏  举报