黑马程序员技术交流社区
标题:
三木运算符优先级问题
[打印本页]
作者:
lzw123451
时间:
2013-3-2 13:28
标题:
三木运算符优先级问题
main()
{
char c1,ch;
ch=getchar(); 获取键盘输入 //getChar()、putchar()都是c语言语句,请忽略。
c1=ch<='Z'&&ch>='A'?' at ':ch; //请告诉我这句怎么理解
putchar(c1); 控制台输出
}
作者:
彭波
时间:
2013-3-2 13:46
此语句就相当于c1=((ch<='Z')&&(ch>='A'))?'at':ch; (1)首先判断(ch<='Z')&&(ch>='A'), 如果是真,就把at赋给c1;否则把ch赋给c1;最后输出c1
(2)其实这就是运算符优先级问题,=优先级相对于其他最低,所以最后做赋值运算,
作者:
赵海洋
时间:
2013-3-3 07:37
楼上正解,就是个优先级问题。先看c1=的右边,c1等于什么最后看,(ch<='Z')&&(ch>='A')这句话判断真假,真则是c1='at',假则是c1=ch。大多数搞不懂的是把这句话从左往右看了。。。。
作者:
施家雄
时间:
2013-3-3 09:46
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不允许这样做。
作者:
Benwolf0818
时间:
2013-3-3 14:30
c1=ch<='Z'&&ch>='A'?' at ':ch; //请告诉我这句怎么理解
()的优先级最高,我加上()吧。
c1={[(ch<='Z')&&(ch>='A')]?' at ':ch};这里主要问题是要先了解运算符的优先级
关于优先级请看这篇blog http://blog.csdn.net/xiaoli_feng/article/details/4567184
作者:
amen0205
时间:
2013-3-3 15:30
1 先判断(ch<='Z')&&(ch>='A') ? 值。
2 如果1为真则把'at'赋值给c1,否则把ch的值赋给c1
3 关于运算符的优先级和结合性,java共47个运算符,14个优先级,2种结合性。
附表一张
QQ截图20130303152202.jpg
(31.33 KB, 下载次数: 22)
下载附件
2013-3-3 15:29 上传
作者:
邹学良
时间:
2013-3-3 16:21
c1=(ch<='Z'&&ch>='A')?' at ':ch;用if语句表示为
if(ch<='Z'&&ch>='A'){
c1=at;
}else{
c1=ch;
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2