三目运算符和表达式我是照表达式来的啊!怎么出不来呢?

EL表达式 三目运算符在不同版本Tomcat中的表现
EL表达式 三目运算符在不同版本Tomcat中的表现
发布时间: 7:15:52
编辑:www.fx114.net
本篇文章主要介绍了"EL表达式 三目运算符在不同版本Tomcat中的表现",主要涉及到EL表达式 三目运算符在不同版本Tomcat中的表现方面的内容,对于EL表达式 三目运算符在不同版本Tomcat中的表现感兴趣的同学可以参考一下。
& & &我在JSP页面中使用了EL表达 式${param.ftablename==nullexamField.ftabblename:param.ftablename},自己测试没有错 误,放到同事机器上就报错(上面的错误),说我的写的不对,没见过EL表达式里使用三目运算符的,非得让我换成其他的判断形式,换就换,反正程序咋写都一
样,有时间了自己查原因。&
&&& 问题不好查,一样的代码只是放到不同的机器上了,后来发现我用的Tomcat5.5版本,同事的是Tomcat6.0版本,开始以为是Tomcat6.0 的一个bug或是不再支持那样的写法,后来通过规范代码,在运算符与表达式之间加空格,改为&c:out value=&${param.ftableid==null
? examField.ftableid : param.ftableid}&&&/c:out&,就不报错了,正常运行。&
&&& 看来不是Tomcat6.0的bug,还是自己代码写的不规范,标准的三位运算表达式Expression1 ? Expression2 :Expression3,每个表达式和运算符之间,都有一个空格,否则Tomcat6.0是无法识别的。有点像Python的行为强制程序员写规范代 码。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:C++运算符和表达式:优先级和结合性
C++运算符和表达式:优先级和结合性
  第三章 运算符和表达式
  第二节 优先级和结合性
  当不同的运算符混合运算时,运算顺序是根据运算符的优先级而定的,优先级高的运算符先运算,优先级低的运算符后运算。在一个表达式中,如果各运算符有相同的优先级,运算顺序是从左向右,还是从右向左,是由运算符的结合性确定的。所谓结合性是指运算符可以和左边的表达式结合,也可以与右边的表达式结合。C++运算符的优先级和结合性参见表3-14。
  在表3-14中,"单"表示是单目运算符,"双" 表示是双目运算符,"三" 表示是三目运算符。表中有一些运算符,我们还没有介绍,以后我们会在有关的内容中学习。
  表3-14 C++运算符的优先级和结合性
  每种运算符都有一个优先级,优先级是用来标志运算符在表达式中的运算顺序的。优先级高的先做运算,优先级低的后做运算,优先级相同的右结合性决定计算顺序。
  大多数运算符都是按从左到右计算,只有三类运算符的结合性是从右到左。他们是:单目、三目和赋值。这一点一定要记住。
  下面我们举几个例子,以帮助学习者对表3-13的理解。
  a = b + c * d
  c * d首先被计算,因为*比+和=的优先级更高,其结果被加到b,因为+的优先级比=的优先级要高,接着进行赋值运算。我们可以用圆括号改变优先级规则,例如,把上面的表达式修改为:
  a = (b + c) * d
  则+在*之前运算。我们再看下面的例子:
  a = b += c
  由于=和+=有相同的优先级,且它们是从左向右结合的,所以,b+=c首先被计算。
  我们可以参照下面的表达式来进一步加深对运算符优先级的理解:
  c = a+b*a-b
  它的运算次序是,第一步先运算b*a,第二步把第一步运算的结果和a相加,第三步把第二步运算的结果减去b,最后一步把第三步的运算结果赋值给左值c。
  可以用括号来改变其运算的次序,如改变成如下的形式:
  c = (a+b)*(a-b)
  则它的的运算次序是,第一步运算a+b,第二步运算a-b,第三步把前面两步的运算结果相乘,最后一步把相乘的结果赋值给左值c。
  经验:不同类型的运算符混合使用时,即使实现优先级与实际需要相符,最好也使用括号隔离之,以便代码更加清晰。当然,在实现优先级与实际需要不相符时,更需要使用括号来改变之。
  如本来是正确的代码:
  if (year%4==0‖year%100!=0 &&year%400==0)
  如果加上括号,则更加清晰,提高了程序的可读性、可维护性。
  If((year%4)==0‖(year%100)!=0 &&(year%400)==0)
了解更多计算机相关基础课程
&&&主编推荐
H3C认证Java认证Oracle认证
基础英语软考英语项目管理英语职场英语
.NETPowerBuilderWeb开发游戏开发Perl
二级模拟试题一级模拟试题一级考试经验四级考试资料
软件测试软件外包系统分析与建模敏捷开发
法律法规历年试题软考英语网络管理员系统架构设计师信息系统监理师
高级通信工程师考试大纲设备环境综合能力
路由技术网络存储无线网络网络设备
CPMP考试prince2认证项目范围管理项目配置管理项目管理案例项目经理项目干系人管理
职称考试题目
招生信息考研政治
网络安全安全设置工具使用手机安全
生物识别传感器物联网传输层物联网前沿技术物联网案例分析
Java核心技术J2ME教程
Linux系统管理Linux编程Linux安全AIX教程
Windows系统管理Windows教程Windows网络管理Windows故障
数据库开发Sybase数据库Informix数据库
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&Java三目运算符(boolean?x:y)
我的图书馆
Java三目运算符(boolean?x:y)
&&&(1)假如表达式1和表达式2具有相同的类型,那么整个条件运算符结果的类型就是这个类型。& &(2)假如一个表达式的类型是T,T是byte或short或char,另一个表达式的类型是int类型的常量表达式,而且这个常量表达式的值是可以用类型T表示的(也就是说,常量表达式的值是在类型T的取值范围之内),那么整个条件运算符结果的类型就是T。 & & (3)除以上情况外,假如表达式1和表达式2的类型不同,那么将进行类型提升,整个条件运算符结果的类型就是提升后的类型。& &&&& &&&System.out.println(true?x:0);& & //line3。& &&&表达式1是char类型,表达式2是int类型的常量表达式,而且这个常量表达式的值0可以用char类型来表示,因此整个条件运算符结果的类型就应当是char类型,所以输出的结果就是'A'。& & System.out.println(true?x:);& & //line4。表达式1是char类型,表达式2是int类型的常量表达式,但是这个常量表达式的值已经超出了char类型的取值范围,因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型了,所以输出的结果是65(字符A的ASCII码)。& & System.out.println(false?i:x);& & //line5。表达式1是int类型的变量,表达式2是char类型的变量,没有常量表达式。因此要进行类型提升,把char类型提升为int类型,整个条件运算符结果的类型就是int类型。所以输出结果就是65。& &&&2、我们再看第二个代码片段,它的结果是在编译阶段引发错误。为什么?& & & &Test t=flase?new Object():new Test();我们看到表达式1是Object类型,表达式2是Test类型。没有常量表达式,类型不同,因此要进行类型提升的。要把Test类型提升为Object类型,因此整个条件运算符结果的类型应当是Object类型。当在赋值的时候要把Object类型赋值给Test类型的变量,当然会引发编译错误。
TA的最新馆藏[转]&您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
运算表达式.doc 23页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:150 &&
运算表达式
你可能关注的文档:
··········
··········
第3章运算符与表达式运算符和表达式是C语言的核心语法,C语言运算符丰富,不仅有优先级概念,还有结合性的概念;不仅有算术、关系和逻辑运算符,还有赋值、逗号运算符。由于C语言运算符丰富,因此表达式类型多,而且将字符、逻辑值数值化,使得C语言表达式的使用变得非常灵活。熟练掌握C语言的运算符和表达式是学好C语言的基本要求。3.1运算符与表达式概述3.1.1C运算符简介运算是对数据的加工过程,表示不同运算的符号叫做运算符,而参与运算的数据叫做操作数。不同的计算机语言有不同的运算符集。C语言中提供了丰富的运算符,它除了常规运算符如算术运算符、关系运算符、逻辑运算符外,还有如赋值运算符、逗号运算符、位处理运算符、指针运算符、访问结构体和联合体成员运算符等C语言所特有的运算符。在C语言中,除了几个控制语句外,几乎所有的操作都是通过由运算符构造的表达式来完成,因此C语言运算符的作用范围很广。1.运算符分类及属性C语言的运算符可分为如表3-1所示的15类。每个运算符除了优先级外,还有结合性等属性。一个表达式的计算顺序需要将运算符的优先级和结合性综合起来考虑。表3-1C语言运算符的优先级及结合性
优先级 运算符 含义 操作数个数 结合方向 举例
1 ()[]-(. 圆括号下标运算符指向结构体成员结构体成员
自左至右 (a(b)*carray[5]p-(numstud.name
2 !~((((((类型)*&sizeof 逻辑非按位取反自增自减负号类型转换间接访问取地址(取指针)变量或类型的长度 1单目运算符 自右至左 !a~0(i(()((((i)(i(()((((i)(x(float)n/20x(*pp(&xsizeof(long)(sizeof(x)
3 */( 乘法除法求余 2双目运算符 自左至右 a*ba/b25(3
4 (( 加法减法 2双目运算符 自左至右 a(ba(b
5 (((( 左移右移 2双目运算符 自左至右 a((3a((2
优先级 运算符 含义 操作数个数 结合方向 举例
6 (((((( 小于小于等于大于大于等于 2双目运算符 自左至右 if(x(y)其余运算符类似
7 ((!( 等于不等于 2双目运算符 自左至右 if(x((y)while(i!(0)
8 & 位与 2双目运算符 自左至右 a&b
9 ^ 位异或 2双目运算符 自左至右 b^024
10 | 位或 2双目运算符 自左至右 044|c
11 && 逻辑与 2双目运算符 自左至右 (a(b)&&(c(d)
12 || 逻辑或 2双目运算符 自左至右 (x(1)&&(y(3)
13 ?: 条件 3三目运算符 自右至左 x(a(b?a:b
14 (((((*(/(((&(^(|((((((( 赋值(复合赋值) 2双目运算符 自右至左 a(a(ba((b(同a(a(b)a*(b(c(同a(a*(b(c))a&(b(同a(a&b)其余复合运算符类似
15 , 逗号 2双目运算符 自左至右 a(1,b(2,c(12
本章将详细讨论C语言的算术运算符、赋值运算符、强制类型转换运算符、逗号运算符、关系运算符、逻辑运算符。其余的运算符将在后续章节中逐步介绍。2.关于运算符的几点说明(1)C语言的运算符按其性质分类有15类;按运算符所要求操作数的个数分类,又可以分为单目运算符、双目运算符和三目运算符。例如:“((”为单目运算符,“*”、“/”为双目运算符,“?:”为三目运算符。(2)优先级别。一个表达式中可以有多个运算符,这时首先按运算符的优先级别进行运算,C语言运算符的优先级别与数学运算中的意义相同,它决定了一个表达式的运算顺序。如果一个操作数两侧有两个不同优先级别的运算符,则先执行优先级别高的运算。如4(9*7,在9的两侧分别为(、*,根据C运算符的运算级别,则先*后(。(3)结合性。如果一个操作数的两侧有两个优先级别相同的运算符,则按结合方向顺序进行处理。C语言运算符的结合性分为:①左结合性。如果一个运算符对其操作数自左至右执行规定的运算,则称该运算符是左结合的。运算符(、(、*、/、(、&&、||等都是左结合性的运算符。例如:5*8/38两侧的运算符分别为*、/,它们的优先级相同,根据“自左至右”方向的结合原则先*后/,即8先和其左边的运算符结合(5*8),再与其右边的运算符结合(40/3)。②右结合性。如果一个运算符对其操作数自右向左执行规定的运算,则称该运算符是右结合的。运算符(、!、((、((等都是右结合性的运算符。例如:a(b(c(8b两侧都是赋值运算符“(”(即优先级相同),根据“
正在加载中,请稍后...关于嵌套的三目运算符
原题: 设有int x=1,y=0;则以下表达式的值为
x--&(y+x)?10:12.5&y++?'A':'Z' #includeint main() { int a,x,y;
a=(x--&(y+x)?10:12.5&y++?'A':'Z');
printf("%d\n",a);
return 0; }答案是10,可为什么wo de 编程输出的是65,
请问错在哪里了?
额,明白了,谢谢
我在(x+y)时将x的值算成0了,应该在第一步就先算(x+y)的,谢谢了
不客气 多点细心 出问题多检查
写下你的评论...
写下你的评论...
写下你的评论...
写下你的评论...
Copyright (C)
All Rights Reserved | 京ICP备 号-2

我要回帖

更多关于 三目运算符表达式 的文章

 

随机推荐