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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

为什么执行下面代码得到的十进制数而不是字符A, B, C....
  1. int num = 60;
  2.                 int n1 = num &15;
  3.                 System.out.println(n1>9?(char)(n1-10+'A'):n1);
  4.                 System.out.println(n1);
  5.                
  6.                 int temp = num >>>4 ;
  7.                
  8.                 int n2 = temp &15;
  9.                 System.out.println(n2>9?(char)(n2-10+'A'):n2);
复制代码
当num=60时得到的是67  3并不是3C这是为什么?(第一次发帖,见谅啦)

123.jpg (44.18 KB, 下载次数: 56)

123.jpg

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 这里都是新手,没有大神哦亲

查看全部评分

3 个回复

倒序浏览
因为  System.out.println(n1>9?(char)(n1-10+'A'):n1);中的 n1是int型的,前面的char类型会有类型提升, 所以输出是67 不是C ,
详细可以查阅三元运算符的元素类型描述。

而int temp = num >>>4 ;运行后temp值是3
     int n2 = temp &15;//执行后还是3
   System.out.println(n2>9?(char)(n2-10+'A'):n2);  因为n2>9不满足,所以输出n2, 结果是3是正确的  

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
三目运算符,属于运算符,要让字符参与运算,会有类型提升,返回的结果也必然是一致的。 所以你在(char)(n1-10+'A')这里强转,还会被转回来。。。
要想让结果变,就只能把整个表达式的结果强转一下了(char)(n1>9?(n1-10+'A'):n1);
如果你非要让结果打印C或者 n1的十进制,就只能用if了吧,毕竟三目运算符是有局限性的

当然这些只是我的理解,不一定就合理

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
好的~谢谢上面两位了!我再看看~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马