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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lzw123451 中级黑马   /  2013-3-2 13:28  /  2338 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

main()
{
     char c1,ch;
     ch=getchar(); 获取键盘输入      //getChar()、putchar()都是c语言语句,请忽略。
     c1=ch<='Z'&&ch>='A'?' at ':ch;   //请告诉我这句怎么理解
     putchar(c1); 控制台输出
}

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
此语句就相当于c1=((ch<='Z')&&(ch>='A'))?'at':ch;  (1)首先判断(ch<='Z')&&(ch>='A'), 如果是真,就把at赋给c1;否则把ch赋给c1;最后输出c1
                                                                           (2)其实这就是运算符优先级问题,=优先级相对于其他最低,所以最后做赋值运算,  

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个

查看全部评分

回复 使用道具 举报
楼上正解,就是个优先级问题。先看c1=的右边,c1等于什么最后看,(ch<='Z')&&(ch>='A')这句话判断真假,真则是c1='at',假则是c1=ch。大多数搞不懂的是把这句话从左往右看了。。。。
回复 使用道具 举报
c1=ch<='Z'&&ch>='A'?' at ':ch;    首先,(ch<='Z')和(ch>='A')都是比较运算符,在Java中返回的要么是true要么是false,不是1和0。而它们能过布尔运算符&&相连。返回的结果也是true或false。只要字符型ch 的ASSIC值在'A'和'Z'之前,则为true,否则为false。只有两个小表达式同时满足是才为true。其它情况都为false。
     表达式(ch<='Z')&&(ch>='A')为true时则把at值赋给c1,为false时则把ch的值赋给c1。
     注意:Java是一种严格的类型语言,它不允许数值类型和布尔类型进行转换。有些语言,如C和C++允许用数值表示逻辑值,例如用0表示false,用1表示true。Java不允许这样做。
回复 使用道具 举报
  c1=ch<='Z'&&ch>='A'?' at ':ch;   //请告诉我这句怎么理解
()的优先级最高,我加上()吧。
  c1={[(ch<='Z')&&(ch>='A')]?' at ':ch};这里主要问题是要先了解运算符的优先级
关于优先级请看这篇blog   http://blog.csdn.net/xiaoli_feng/article/details/4567184
回复 使用道具 举报
1 先判断(ch<='Z')&&(ch>='A') ?  值。
2 如果1为真则把'at'赋值给c1,否则把ch的值赋给c1
3 关于运算符的优先级和结合性,java共47个运算符,14个优先级,2种结合性。
附表一张

QQ截图20130303152202.jpg (31.33 KB, 下载次数: 24)

QQ截图20130303152202.jpg
回复 使用道具 举报
c1=(ch<='Z'&&ch>='A')?' at ':ch;用if语句表示为
if(ch<='Z'&&ch>='A'){
          c1=at;
}else{
c1=ch;
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马