c语言结合性

在标准C语言的文档里,对操作符的结合性并没有作出非常清楚的解释。一个满分的回答是:它是仲裁者,在几个操作符具有相同的优先级时决定先执行哪一个。

每个操作符拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。例如,在表达式a*b+c中,乘法运算的优先级高于加法运算符的优先级,所以先执行乘法a*b,而不是加法b+c。

但是,许多操作符的优先级都是相同的。这时,操作符的结合性就开始发挥作用了。在表达式中如果有几个优先级相同的操作符,结合性就起仲裁的作用,由它决定哪个操作符先执行。像下面这个表达式:

int a,b=1,c=2;

a=b=c;

我们发现,这个表达式只有赋值符,这样优秀级就无法帮助我们决定哪个操作先执行,是先执行b=c呢?还是先执行a=b。如果按前者,a=结果为2,如果按后者,a的结果为1。

所以的赋值符(包括复合赋值)都具有右结合性,就是说在表达式中最右边的操作最先执行,然后从右到左依次执行。这样,c先赋值给b,然后b在赋值给a,最终a的值是2.类似地,具有左结合性的操作符(如位操作符“&”和“|”)则是从左至右依次执行。

结合性只用于表达式中出现两个以上相同优先级的操作符的情况,用于消除歧义。事实上你会注意到所有优先级相同的操作符,他们的结合性也相同。这是必须如此 的,否则结合性依然无法消除歧义,如果在计算表达式的值时需要考虑结合性,那么最好把这个表达式一分为二或者使用括号。

⑵ c语言里面结合性是什么意思,

仔细看了一下你的题目,并且在编译器中运行了一下:

运行的结果专如下:

接下来我们解析下属为什么是这个结果:

1、++ : 优先级为2,结合规则:自右至左。

2、|| 和 && :优先级分别在12和11,结合规则为:自左至右。

3、++,--是算术运算符,而 ||, && 是逻辑运算符。

4、实际上++x || ++y && ++z;是一个逻辑表达式,整个运算过程遵从的是 || 和 && 的结合规则;而在逻辑的每一个条件中(++x, ++y, ++z),是一个运算表达式。

以上解释如果对你有帮助,请点赞下,谢谢。

⑶ C语言运算符的结合性

结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行计算,当遇到同级别运算符或者是符号一样但运算目数不同时,就要用到运算符的结合性。
例如:X=-B+C 或 X=A-B+C与X=A-B*C两个表达式计算时是这样的

对于X=-B+C,表达式运算时是这样的,先数据栈读入X,符号栈读入=(赋值运算符),因为=是双目运算符,还要读入数据,所以继续向后读表达式;又读到-号,不是数据,而且-号的运算级别高于=号,所以-号进入符号栈,继续向后读表达式,读到数据B进入数据栈,这时候-B就符合负号运算符的自右向左结合的单目运算,就进行求值运算,符号栈中-号出栈,与数据栈中B结合成-B,-B就变为一个新的运算数据进入数据栈;后面继续读入+号,它是双目运算符后面还要读入一个运算数据,C就读入了数据栈,后面没有运算符再读入,表达式结束,那么就进行符号栈+号和数据栈中C和-B的值相加,将结果存入数据栈中,符号栈中+出栈;符号栈中还有=号,它和数据栈中的结果与X形成赋值的自右向左双目结合运算,表达式的结果就此运算完毕。
对于X=A-B+C与X=A-B*C两个表达式计算时,前面X=A-B过程是相同的,只是后面,由于*号比+号的运算级别高,所以表达式X=A-B*C中要先算B*C的结果,在一步一步回退进行A-和X=的运算。而表达式X=A-B+C中+号与-同级别,所以当满足运算条件时就先进行A-B运算,然后进行+C和X=的运算。
不知道以上的说明,是否能让你明白C语言中运算符结合性和表达式求值的过程。

⑷ C语言中左右结合性,怎么理解

意思是:从表达式右边开始执行;只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。
有些运算符的优先级是错误的。
“当按照常规方式使用时,可能引起误会的任何运算符”就是存在错误优先级的运算符。
.的优先级高于*。->操作符用于消除这个问题。
*p.f变成了*(p.f)而不是(*p).f
[]高于*,于是int *ap[]中的ap变成了元素为int指针的数组。
函数()高于*,因此,int *fp()不再是函数指针了,而是一个函数,返回int *。
逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。
逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。
在表达式中如果有布尔操作、算术运算、位操作等混合计算,始终应该在适当的地方加上括号。
x = f() + g() * h();
乘法先于加法执行,但是g()和h()的调用可能以任何顺序出现。
同样,f()可能在乘法之前调用,也可能在乘法之后调用。
优先级和结合性规则告诉你哪些符号组成一个意群,大部分这样的意群内部如何进行计算的次序是未定义的。 有些操作符,如&&和||等,其操作数的计算顺序是确定的,它们使用短路原则。
C语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他操作符时一律加上括号。
结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。
唯一的三目运算符?:也是具有右结合性的。
所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。在函数调用中,各个参数的计算顺序是不确定的。

⑸ C语言中右结合性和右结合性是什么意思

举个例子
a=b+c+d
=是右结合的,所以先计算(b+c+d),然后再赋值给a
+是左结合的,所以先计算(b+c),然后再计算(b+c)+d

C语言中具有右结合性的运算符包括所在单目运算符以及赋值运算符(=)和条件运算符。其它都是左结合性.

⑹ C语言中的左结合性是什么

其实很简单,它就是同优先级操作符在语句中的“运算优先级(或叫顺序)”。

比如12/3*4,/和*是同优先级操作符,先算12/3呢还是先算3*4呢?由于/和*都是左→右结合的,所以12/3*4就被解释为(12/3)*4,而不会被解释为12/(3*4)。

再比如当p是指针时的*p++,由于*和++同级别,它们又是右→左结合的,所以被解释为*(p++)而不会被解释为(*p)++。

从以上可知,对于不同优先级的操作符,结合性就起不到什么作用了。个人理解,仅供参考。

1、在打开的ie浏览器窗口右上方点击齿轮图标,选择“Internet选项”,如下图所示:

⑺ C语言中左右结合性什么意思

对左边还是右边的操作对象产生影响。

⑻ 什么是C语言的结合性

在几个操作符具有相同的优先级时决定先执行哪一个。比如:
int a, b = 2;
a = b = 3;
那么a,b的值?答案是a,b都是3.
因为赋内值运算符具有容右结合性,但执行到“a = b = 3”表达式时,先执行“b=3”,然后赋值运算符运算完后返回左操作数,即b(等于3)。于是原表达式成为“a=b",于是a也为3.

⑼ C语言中的结合性是怎么回事

简单说就是,从表达式右边开始执行;

只有同优先级的运算符才具有结合性“自左至右”或者“自右自左”一说。

exp(不同优先级运算符,依据优先级高低进行运算):
int a = 1, b =10, c = 30;
int a = a * b + c;
因为 * 比 + 的运算符优先级高,所以
先计算a * b (先计算左边,未考虑结合性),在计算 10 + c
结果是 a = 300

exp(同优先级运算符依据结合性进行运算):
int a, b = 1, c = 8;
a = b = c;

赋值运算符其结合性即为自右向左,即 a = ( b = c), 其结果是 b = 8, a = 8;
(错误答案:自左向右进行结合的话a = 1)