自己实现10进制转2进制和16进制

 1 public class Test {
 2  
 3     public static void main(String[] args) {
 4         System.out.println(toBinary(9));
 5         System.out.println(toHex(559));
 6         System.out.println(Integer.toBinaryString(9));
 7         System.out.println(Integer.toHexString(559));
 8       /*1001
 9         22F
10         1001
11         22f*/
12     }
13      
14     public static String toBinary(int n){
15         StringBuilder temp = new StringBuilder();
16         while(n/2 >=1 || n%2 == 1){//除2取余, (|| n%2 == 1) 在次为了补上最后一个0或者1
17             temp.append(n%2);
18             n = n/2;
19         }
20         return temp.reverse().toString();
21     }
22     /**
23      10进制转16进制:
24         将给定的十进制整数除以基数16,余数便是等值的16进制的最低位。
25         将上一步的商再除以基数16,余数便是等值的16进制数的次低位。
26         重复上一步骤,直到最后所得的商等于0为止。各次除得的余数,便是16进制各位的数,最后一次的余数是最高位
27      */
28     public static String toHex(int n){
29         /*思路:除16取余*/       
30         StringBuilder temp = new StringBuilder();
31         while(n/16 >= 1){
32             int aa = n/16;
33             int bb = n%16;
34             //0123456789 10 11 12 13 14 15
35             //0123456789 A  B  C  D  E  F
36             String str = "";
37             if(bb == 10){
38                 str = "A";
39             }else if(bb == 11){
40                 str = "B";
41             }else if(bb == 12){
42                 str = "C";
43             }else if(bb == 13){
44                 str = "D";
45             }else if(bb == 14){
46                 str = "E";
47             }else if(bb == 15){
48                 str = "F";
49             }else{
50                 str = bb+"";
51             }
52             temp.append(str);
53             n = aa;
54             if(n/16 < 1){//补上最后一位
55                 temp.append(n);
56             }
57         }
58         return temp.reverse().toString();
59     }
60 }

 

posted @ 2014-09-02 12:07  呛呛cei  阅读(289)  评论(0编辑  收藏  举报