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

(爱问答)

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

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

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

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

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

热门标签:
英语 谜语 作文 数学 公式 语文 物理 化学 工艺 java c语言 实验 方程 金属 分子 数据库 硫酸 酒精 运算 石油 vc 世界大战 php 化合物 mysql
最新更新:
电学的一个小问题 为什么打点计时器只能粗略瞬时速度 lookdownupon用法 中专都考不上大学有必要复读一年吗? 如图,已知∠B=∠DEF,AB=DE,请添加一个条件使△ABC≌△DEF,则需添加的条件是__________. 求曲线y=2x^2和直线y=2的所围图形的面积 夜上受降城闻笛是哪句 这个怎么填数字? 小明家下五层楼是5楼,那么小明家上五层楼是几层楼? 填空题,这个题目是怎么算的呢…… 22335577()143中括号里填什么数字。 懂得人帮我看一下这个英文是啥意思??? 最小的物质单位是什么 怎么估算根号52000000 about的重读字母是哪里