黑马程序员技术交流社区

标题: 十进制转二进制、十六进制优化后的程序,负数的结果是怎么出来的? [打印本页]

作者: 蓝墨清幽    时间: 2015-4-14 09:54
标题: 十进制转二进制、十六进制优化后的程序,负数的结果是怎么出来的?
/*
查表法:将所有的元素临时存储起来,建立对应关系。
十六进制:每一次&15后的值作为索引去查建立好的表,就可以找到对应的元素。
那么这个表怎么建立呢?可以通过数据的形式来定义。
查表法优化:将二进制、十六进制之间的共性提取出来建立方法。
*/
class ArrayBinHexYouHua
{
        public static void main(String[] args)
        {
                toBin(6);
                toBin(-1);
                toBa(60);
                toHex(60);
        }

        /*
        建表:发现结果出来了,却是反着的,可以通过StringBuffer reverse功能来完成。
        所以可以使用已经学过的容器:数组来完成存储。
        */
        public static void trans(int num,int base,int offset)  //num:传入数值。base:与“&”二进制基数。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类型:4个字节*8位/字节=32个字节。
                int pos = arr.length;  //定义一个操作数组的指针。
                while(num!=0)
                {
                        int temp = num & base;
                        arr[--pos] = chs[temp];
                        num = num >>> offset;
                }
                //System.out.println("pos="+pos);
                for(int x=pos;x<arr.length;x++)  //存储数据的arr数组遍历。
                {
                        System.out.print(arr[x]);
                }
        }


        /*
        十进制-->二进制。与1,偏移1位。
        */
        public static void toBin(int num)
        {
                trans(num,1,1);
                System.out.println();
        }
        /*
        十进制-->八进制。与7,偏移3位。
        */
        public static void toBa(int num)
        {
                trans(num,7,3);
                System.out.println();
        }
        /*
        十进制-->十六进制。与15,偏移4位。
        */
        public static void toHex(int num)
        {
                trans(num,15,4);
                System.out.println();
        }
}
作者: IT杰    时间: 2015-4-14 14:37
看着有点复杂,好像Java中有专门的进制转换的方法,不用这么麻烦
作者: 小龟    时间: 2015-4-14 18:49
来看看~~这个毕老师视频里有 啊




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