黑马程序员技术交流社区

标题: 求十进制转换成二进制源码 [打印本页]

作者: wuyuwen    时间: 2014-12-23 16:17
标题: 求十进制转换成二进制源码
再次谢过
作者: 樊小乐    时间: 2014-12-23 16:25
这是你要的源码。buf[--charPos] = digits[i & mask];这句我没有研究懂,如果你看懂了跟我解释一下
final static char[] digits = {
        '0' , '1' , '2' , '3' , '4' , '5' ,
        '6' , '7' , '8' , '9' , 'a' , 'b' ,
        'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
        'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
        'o' , 'p' , 'q' , 'r' , 's' , 't' ,
        'u' , 'v' , 'w' , 'x' , 'y' , 'z'
    };
public static String toBinaryString(int i) {
        return toUnsignedString(i, 1);
    }

    /**
     * Convert the integer to an unsigned number.
     */
    private static String toUnsignedString(int i, int shift) {
        char[] buf = new char[32];
        int charPos = 32;
        int radix = 1 << shift;
        int mask = radix - 1;
        do {
            buf[--charPos] = digits[i & mask];
            i >>>= shift;
        } while (i != 0);

        return new String(buf, charPos, (32 - charPos));
    }
作者: 月老~牵红线    时间: 2014-12-23 17:06
樊小乐 发表于 2014-12-23 16:25
这是你要的源码。buf[--charPos] = digits;这句我没有研究懂,如果你看懂了跟我解释一下
final static cha ...

buf[--charPos] = digits[i & mask];这句话表示,拿 i & mask 的值去查表,找到对应的值放到buf数组中,之后指针charPos-1,往左移一位。
作者: 月老~牵红线    时间: 2014-12-23 17:09
  1. public static void youHua(int num,int base,int offset)
  2.         {
  3.                 //定义表
  4.                 char[] chs={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
  5.                 //定义一个临时存储容器。
  6.                 char[] arr=new char[32];
  7.                 //定义一个操作数组的指针,将指针初始值定义为数组长度
  8.                 int pos=arr.length;
  9.                 while(num!=0)
  10.                 {
  11.                         int temp=num&base;//如果是转化成二进制,base=1,转化成十六进制,base=15
  12.                         /*查表,将&后的值放入新数组中,因为pos初始值为数组长度,
  13.                         --pos实现从右往左存,这样for遍历打印就是正着的*/
  14.                         arr[--pos]=chs[temp];
  15.                         num=num>>>offset;//位移。如果是转化成二进制,offset=1,转化成十六进制,offset=4
  16.                 }
  17.                 for (int x=pos;x<arr.length ;x++ )
  18.                 {
  19.                         System.out.print(arr[x]);
  20.                 }
  21.                 if(num==0)
  22.                 {
  23.                         System.out.println(0);
  24.                         return ;
  25.                 }
  26.         }
复制代码
这里:num:要转换的数,base:要与的值,offset:位移的数
作者: kerner    时间: 2014-12-23 23:34
利用栈先进后出的原理,随便你转化为什么进制都可以。
作者: 官方    时间: 2014-12-24 09:03
        //十进制转二进制         public static void parseInt1(String str)         {                 int num=Integer. valueOf(str);//字符串转成数字                 ArrayList<Integer> list=new ArrayList<Integer>();                  int yu=0;                 while(true)                 {                         if(num==1)                         {                                 list.add(num);                                 break;                         }                         yu=num%2;                         num=num/2;                         list.add(yu);                 }                 Collections.reverse(list);                         System.out.print(list);         }
作者: 官方    时间: 2014-12-24 09:04
        //十进制转二进制
        public static void parseInt1(String str)
        {
                int num=Integer. valueOf(str);//字符串转成数字
                ArrayList<Integer> list=new ArrayList<Integer>();

                int yu=0;
                while(true)
                {
                        if(num==1)
                        {
                                list.add(num);
                                break;
                        }
                        yu=num%2;
                        num=num/2;
                        list.add(yu);
                }
                Collections.reverse(list);
                        System.out.print(list);
        }
再给你发一遍 希望你能看懂 挺简单的
作者: junge520    时间: 2014-12-24 11:11
一个for 一个移位
作者: 钟道上    时间: 2014-12-24 12:17
//使用查表法进行多种进制的转变另外加上基本数据类型的求法
public class Jingzhi {
        public static void main(String[] args){
                int num=60;
                System.out.println(
                                Integer.toBinaryString(num));
                System.out.println(Integer.toOctalString(num));
                System.out.println(Integer.toHexString(num));
               
//                toBin(num);
////               
//                toOct(num);
//               
//                toHex(num);
        }

        private static void toHex(int num) {
                con(num,15,4);
               
        }

        private static void toOct(int num) {
                // TODO Auto-generated method stub
                con(num,7,3);
        }

        private static void toBin(int num) {
                // TODO Auto-generated method stub
                con(num,1,1);
        }
//查表法
        private static void con(int num, int x, int y) {
                // TODO Auto-generated method stub
                if(num==0){
                        System.out.println(0);
                        return;
                }
//                查表
                String[] chs={"0","1","2","3","4",
                                "5","6","7","8","9","a","b","c","d","e","f"};
               
//                定义一个容器
//                StringBuilder sb=new StringBuilder();
                String[] sb=new String[32];//还是用StringBuilder把
                int pos=sb.length;
                while(num!=0){
                        sb[--pos]=chs[num&y];
                        num>>>=x;
                }
                for(int x1=pos;x1<sb.length;x1++){
                        System.out.println(sb[x]);
                }
               
                System.out.println();
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2