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

解决方案 »

  1.   


    public static String dec2Hex(int dec) {
            StringBuffer sb = new StringBuffer();
            sb.append("0x");        for (int i = 0; i < 8; i++) {
                int tmp = (dec >> (7 - i % 8) * 4) & 0x0f;            if (tmp < 10)
                    sb.append(tmp);
                else
                    sb.append((char) ('A' + (tmp - 10)));
            }        return sb.toString();
        }
      

  2.   

    哈哈,看来大家都很喜欢fen啊
      

  3.   

        
    public static String dec2Hex(int dec) { 
         StringBuffer sb = new StringBuffer();
          sb.append("0x"); 
          for (int i = 0; i < 8; i++) { 
           int tmp = (dec >> (7 - i%8) * 4) & 0x0f;//这里的i没有有必要%8吗?
           if (tmp < 10) sb.append(tmp);
           else  sb.append((char) ('A' + (tmp - 10)));
         } 
         return sb.toString(); 
        } 
      

  4.   

    甘草是C版来的大哥....比较注重这个...呵呵,我是说效率..不是说分啊
    顺便说下...还是要的说
    java_net 200的网页里也有
      

  5.   

    是不是这样优化?简化?public static String dec2Hex(int dec) {
            char[] hex = {'0','1','2','3','4','5','6','7',
                          '8','9','A','B','C','D','E','F'};
            StringBuffer sb = new StringBuffer();
            sb.append("0x");        for (int i = 28; i >= 0; i-=4) {
                sb.append(hex[(dec >> i) & 0x0f]);
            }
            return sb.toString();
        }
      

  6.   

    如果说最简化,还是用 reutnr String.format("0x%08X", dec);