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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tansuozhey 中级黑马   /  2015-11-24 19:05  /  1929 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int  num = 60;
int  n1 = num&15;
System.out.println((n1>9)?((char)(n1-10+'A')):n1);

21 个回复

倒序浏览
60&15等于12   ture算左边   67   但是我也不知为啥没强转
等大神来吧
回复 使用道具 举报
ni=12,大于9,读(char)(n1-10+'A'),得到实质,
回复 使用道具 举报
ni=12,大于9,读(char)(n1-10+'A'),得到‘C',和比较后提升为int,所以是67
回复 使用道具 举报
hrfhwy 发表于 2015-11-24 23:28
ni=12,大于9,读(char)(n1-10+'A'),得到‘C',和比较后提升为int,所以是67

”和比较后提升为int,所以是67“,这句什么意思,要和谁比较?
回复 使用道具 举报
tansuozhey 发表于 2015-11-25 08:53
”和比较后提升为int,所以是67“,这句什么意思,要和谁比较?

冒号前后是一个类型,所以char型的‘C',提升为int型的67
回复 使用道具 举报
顶一个
回复 使用道具 举报
char自动提升为int类型,因为n1是int 类型
回复 使用道具 举报
王际涛 发表于 2015-11-26 00:19
char自动提升为int类型,因为n1是int 类型

应该是这样,但是个人认为java的这个语法挺奇怪的!
回复 使用道具 举报
谢谢各位!
回复 使用道具 举报
wqd123 中级黑马 2015-11-26 12:28:17
11#
&不是与吗?怎么跑到运算里来了
回复 使用道具 举报
DaYe 中级黑马 2015-11-26 12:50:18
12#
60和15与运算就等于12(111100与001110结果为001100)
回复 使用道具 举报
我是这样理解的。
考察了两点:
① 数据类型自动提升
② 运算符的优先级
   这个跟运算符的优先级有关,“?:”是种运算符,而(char)在运算符之前就已经运算完了,一段时间内确实先转化成了“C",但在运算过程中运算符”?:“遇到了n1(n1参与了运算(判断)),这是被又被提升为int了。
转化过程:
(n1>9)?((char)(n1-10+'A')):n1
= true?(‘C’:12)
= 67   
如果这样写(char)((n1>9)?((char)(n1-10+'A')):n1 )结果就应该是‘C’(这个我没试过,如果语法没错应该没问题)。
回复 使用道具 举报
类型强制转换了
回复 使用道具 举报
强制转换类型
回复 使用道具 举报
public class Test1 {
        public static void main(String[] args) {
                int num = 60;
                int n1 = num & 15;
                System.out.println((n1 > 9) ? ((char) (n1 - 10 + 'A')) : 2);
                System.out.println((n1 > 9) ? ((char) (n1 - 10 + 'A')) : "2");
        }
}

打印出来都是C
why?
回复 使用道具 举报
num&15;这是位运算,60换成二进制是111100,15换成二进制是001111,运算结果是001100换成十进制是12,'A'是65,于是System.out.println((12>9)?((char)(12-10+65)):12);结果就是67了
回复 使用道具 举报
Myth、骞 发表于 2015-11-26 17:56
public class Test1 {
        public static void main(String[] args) {
                int num = 60;

三元运算符比较特殊吧。 系统根本不知道你输入的2整型的,这个2可能是字符型的值,所以系统可能默认为是字符型了。(这个我是这么理解的啊!)
回复 使用道具 举报
yuhongzhen 发表于 2015-11-26 20:25
num&15;这是位运算,60换成二进制是111100,15换成二进制是001111,运算结果是001100换成十进制是12,'A' ...

我觉得最重要的是告诉了12是int型了
回复 使用道具 举报
如果在整个输入内容的前面加上(char)结果应该就是‘C’
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马