结合性和优先的联系与区别

发布时间 2023-11-17 15:22:10作者: 彭乐祥

一、结合性与优先性

当我们考虑运行一段复杂表达时,我们是先考虑优先级再考虑结合性。
也就是说优先级高的先运算出结果,然后在同一优先级的情况下去判断结合性。

二、题目

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;呢?