一、结合性与优先性
当我们考虑运行一段复杂表达时,我们是先考虑优先级再考虑结合性。
也就是说优先级高的先运算出结果,然后在同一优先级的情况下去判断结合性。
二、题目
int i = -2;
int n = ++i == 0 ? 99 : i == -1 ? 11 : 22;
请问n的值是多少?
答:n = 11!
why?
根据优先级,++i的优先级最高,因此先算出其值,也就是i此时等于-1,然后再是关系运算符==,算出i==0与i==-1,前一句0后一句1,最后带入到条件运算符?:
得到n=0?99:1?11:22
此时优先级一致,安条件运算符?:的结合性分析(右结合)
得到n=11。
三、关于++i与i++的变式
i++;与++i;的区别
截取里面的一点内容,关于i++与++i的原理实现
int i;
int firstAdd() {
i = i + 1;
return i;
}
int lastAdd() {
int temp = i;
i = i + 1;
return temp;
}
int main() {
i = 0;
i = firstAdd();//i=++i
printf("%d\n", i);
i = 0;
i = lastAdd();//i=i++
printf("%d", i);
return 0;
}
注意:i=-1;++i==0;与i++==0;不一样,前者结果为1后者结果为0。
如果i=-1呢?
如果换成n=i++==0?99;i==-1?11:22;呢?
如果换成n=i++==-1?99;i==-1?11:22;呢?
标签:11,优先,优先级,22,区别,++,99,int,结合
From: https://www.cnblogs.com/cony1/p/17838849.html