A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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呀,为什么呀?求高手解惑。。

6 个回复

倒序浏览
因为x是int类型的,(char)(x-10+‘a') 的值是c,把c赋给x又转成了int类型的,x就等于99。
回复 使用道具 举报
这样改一下:
char y=(char)(x-10+'a');
sb.append(y);
回复 使用道具 举报
黯然残影 发表于 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);

恩呢。。确实是类型自动提升了。。细节很重要呀。。
回复 使用道具 举报
直接sb.append((char)(x-10+'a'));
回复 使用道具 举报
类型提升了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马