intx=1,y=0;printf("%d",x-->(y+x)?5:25>
c语言里int x=1,y=0; printf("%d",x-->(y+x)?5:25>y++?'1':'2'); 这个是先按优先级计算--和()的吗,然后在按结合性自右向左计算吗
这个是按照优先级来算的。按照第一优先级,第二优先级和第三优先级分别进行顺序计算:
第一优先级: 数组下标[],圆括号( ),成员选择(对象). ,成员选择(指针)->
第二优先级:第二优先级 负号运算符-,强制类型转换,自增运算符++,自减运算符--,取值运算符,取地址运算符&,逻辑非运算符!,按位取反运算符~,长度运算sizeof符,
第三优先级: 除/,乘*,余数%
第四优先级:,加+,减-
第五优选级:左移<<,右移>>
第六优选级: 大于>,大于等于>=,小于<,小于等于<=
第七优选级:等于==,不等于
整体是按照结合性自右向左。
具体分析一下:x-->(y+x)?5:25>y++?'1':'2'这个式子是由2个条件运算符(三目运算符)为主体
按照优先级,我们先算括号内容,即y+x=1;再算x--=0和y++=1。整理一下:整个式子转变为:
0>1?5:25>1?'1':'2'
现在再算两个三目运算符的式子,从左往右:
0>1为假,所以0>1?5:25为25,这下式子转变为:25>1?'1':'2'。很明显,25>1为真,所以结果为'1',这里的‘1’它不是数字1,而是字符1,这里自动有%c转换为%d,即为字符1的ASCII码。
由于'1'的ASCII为49,所以最终结果为49
证明截图如下:
还有问题吗,谢谢采纳(^o^)/~
热门标签: