首页 > 教育

intx=1,y=0;printf("%d",x-->(y+x)?5:25>

更新时间2022-02-27 04:44:54

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
证明截图如下:

int x=1,y=0;      printf("%d",x-->(y+x)?5:25>

还有问题吗,谢谢采纳(^o^)/~

上一篇:x^2+y^2+kx+3y+3=0的K的取值范围是

下一篇:五分之三比八分之五的化简比并求比值