请用移位的方式打印出一个十进制整数的十六进制形式.
提示:按每4个二进制位对整数进行移位和去高位处理,得到的结果就是十六进制数的一位,然后按下面三种方式之一(作为作业,要求每种方式都用到)计算出一个十六进制数值对应的十六进制形式: (1)0-9之间的数值直接加上字符'0',9以上的数值减去10以后再加上字符'A' 
(2)定义一个数组,其中包含0-F这些字符,然后用要计算的数值作为数组的索引号,即可获得其对应的十六进制数据。 
(3)Character.forDigit静态方法可以将一个十六进制的数字转变成其对应的字符表示形式,例如,根据数值15返回字符'F'。 

解决方案 »

  1.   

    2)
    public class Test{
        public static String integerToHex(int x){
            char[] hex={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
            StringBuilder sb=new StringBuilder();
            for(int i=0;i<8;i++){
                sb.append(hex[x&0xf]);
                x>>=4;
            }
            return sb.reverse().toString();
        }
        public static void main(String[] args){
            System.out.println(integerToHex(255));
        }
    }
      

  2.   

    呵呵,,谢谢你哦,但是for循环那一段看不懂,能解释一下吗
      

  3.   

    x&0xf:,位运算,拿x和0xf做与运算,0xf是低四位全是1其它位全是0的数,结果就是取出x的低四位.hex[x&0xf]:x的低四位的数做为hex数组的下标。hex这个数组的构造就是,下标为i的十六进制字符做为hex[i]的值 ,这样hex[x&0xf]就取出了x的低四位对应的十六进制字符。x>>=4:相当于x=x>>4,位运算,就是把x右移四位,再把结果赋值给x,相当于把低四位去掉了。循环控制,一个int数占四个字节,共有32位,有8个4位,所以循环要8次。
      

  4.   

    hex[x&0xf]:x的低四位的数做为hex数组的下标。hex这个数组的构造就是,i对应的十六进制字符做为hex[i]的值 ,这样hex[x&0xf]就取出了x的低四位对应的十六进制字符。
      

  5.   

    hex[x&0xf]  中的Oxf是什么东西?是1111吗?是自己定义的还是java定义的。
      

  6.   

    0x打头的数字是16进制,0xf表示16进制的f。
    另外,0(零)打头的是8进制,比如017,表示8进制的17
      

  7.   

    public static void main(String[] args) {
    int number = 6789;
    System.out.println(Integer.toHexString(number));//用于检验下列方法的正确性
    System.out.println(toHexString(number,TYPE_1));
    System.out.println(toHexString(number,TYPE_2));
    System.out.println(toHexString(number,TYPE_3));
    }

    public static final int TYPE_1 = 1;
    public static final int TYPE_2 = 2;
    public static final int TYPE_3 = 3;

    private static String toHexString(int number, int type) {
    int mask = 0x0000000F;
    char buff [] = new char[8];
    for(int i=0;i<8;i++){
    int hex = (number>>>(i*4))&mask;//无符号右移
    switch(type){
    case TYPE_1:
    buff[8-i-1]=convertHex_1(hex);
    break;
    case TYPE_2:
    buff[8-i-1]=convertHex_2(hex);
    break;
    case TYPE_3:
    buff[8-i-1]=convertHex_3(hex);
    break;
    }
    }
    return new String(buff);
    } private static char convertHex_1(int hex) {
    if(hex>=10)return (char)(hex-10+'A');
    return (char)(hex+'0');
    } public static final char HEX_CHARs []=new char[]{
    '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
    };
    private static char convertHex_2(int hex) {
    return HEX_CHARs[hex];
    } private static char convertHex_3(int hex) {
    return Character.forDigit(hex,16);
    }
      

  8.   

    我们也来做一个,嘻嘻public class Test {
        
        private final static char[] HEX = "0123456789abcdef".toCharArray();
        
        public static void main(String[] args) {
            int num = 1234567;
            System.out.println(toHex(num));
            System.out.println(Integer.toHexString(num));
        }
        
        public static String toHex(int num) {
            if (num == 0) {
                return "0";
            }
            char[] chs = new char[Integer.SIZE / 4];
            int offset = chs.length;
            while (num != 0) {
                chs[--offset] = HEX[num & 0xf];
                num >>>= 4;
            }
            return new String(chs, offset, chs.length - offset);
        }
    }