黑马程序员技术交流社区

标题: 十进制转化为十六进制的问题 [打印本页]

作者: anywayDo    时间: 2015-5-17 15:38
标题: 十进制转化为十六进制的问题
  1.         public static void decToHex(int a)
  2.         {
  3.                 StringBuilder sb=new StringBuilder();
  4.                 while(a!=0)
  5.                 {
  6.                         int x=a&15;
  7.                         if(x<10)
  8.                                 sb.append(x);
  9.                         else
  10.                         {
  11.                                 x=(char)(x-10+'a');
  12.                                 sb.append(x);
  13.                                
  14.                         }
  15.                         a=a>>>4;
  16.                 }
  17.                 System.out.println(sb.reverse());
  18.         }
复制代码
把60穿传进去,输出的结果是399,正确的结果应该是3c呀,为什么呀?求高手解惑。。

作者: 黯然残影    时间: 2015-5-17 17:49
因为x是int类型的,(char)(x-10+‘a') 的值是c,把c赋给x又转成了int类型的,x就等于99。
作者: csu050416    时间: 2015-5-17 18:06
这样改一下:
char y=(char)(x-10+'a');
sb.append(y);

作者: anywayDo    时间: 2015-5-18 14:20
黯然残影 发表于 2015-5-17 17:49
因为x是int类型的,(char)(x-10+‘a') 的值是c,把c赋给x又转成了int类型的,x就等于99。 ...

棒棒哒。。厉害。。
作者: anywayDo    时间: 2015-5-18 14:24
csu050416 发表于 2015-5-17 18:06
这样改一下:
char y=(char)(x-10+'a');
sb.append(y);

恩呢。。确实是类型自动提升了。。细节很重要呀。。
作者: 冷雨敲窗被未温    时间: 2015-5-18 17:38
直接sb.append((char)(x-10+'a'));
作者: 白水丶    时间: 2015-5-18 20:24
类型提升了




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