C语言运算符的结合性
发布时间:2025-05-13 11:08:50 发布人:远客网络
一、C语言运算符的结合性
1、结合性是规定运算符与运算数组合成表达式的结合方向。因为运算符是有优先级别的,表达式的运算应该是先按运算符的优先级由高到低的顺序,结合运算数进行计算,当遇到同级别运算符或者是符号一样但运算目数不同时,就要用到运算符的结合性。
2、例如:X=-B+C或 X=A-B+C与X=A-B*C两个表达式计算时是这样的
3、对于X=-B+C,表达式运算时是这样的,先数据栈读入X,符号栈读入=(赋值运算符),因为=是双目运算符,还要读入数据,所以继续向后读表达式;又读到-号,不是数据,而且-号的运算级别高于=号,所以-号进入符号栈,继续向后读表达式,读到数据B进入数据栈,这时候-B就符合负号运算符的自右向左结合的单目运算,就进行求值运算,符号栈中-号出栈,与数据栈中B结合成-B,-B就变为一个新的运算数据进入数据栈;后面继续读入+号,它是双目运算符后面还要读入一个运算数据,C就读入了数据栈,后面没有运算符再读入,表达式结束,那么就进行符号栈+号和数据栈中C和-B的值相加,将结果存入数据栈中,符号栈中+出栈;符号栈中还有=号,它和数据栈中的结果与X形成赋值的自右向左双目结合运算,表达式的结果就此运算完毕。
4、对于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=的运算。
5、不知道以上的说明,是否能让你明白C语言中运算符结合性和表达式求值的过程。
二、c语言中的左结合性和右结合性有什么区别
1、左结合:先做a*=a,因为a=10,a*=可写为a=a*a=100此时a的值为100
2、a-=a可写为a=a-a=0,此时a的值为0
3、C语言中各运算符的结合性分为两种:左结合性和右结合性。
4、例如:算术运算符的结合性是自左至右,即先左后右。
5、如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。这种自左至右的结合方向就称为“左结合性”。
6、而自右至左的结合方向称为“右结合性”。最典型的右结合性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z再执行x=(y=z)运算。
7、C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。(上文的优先级有分辨左右结合性)
三、运算符的结合性都分别是什么
1、一个运算量两侧的运算符优先级相同时,按运算符的结合性所规定的结合方向处理。C语言中各运算符的结合性分为两种,即左结合性和右结合性。
2、如,算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z则y应先与“-”号结合,执行x-y运算,然后再执行+z的运算。
3、而最典型的右结合性运算符是赋值运算符,如x=y=z,由于“=”的右结合性,应先执行y=z,再执行x=(y=z)运算。
4、(1)算术运算符(+,-,*,/,%,++,--)。
5、(2)关系运算符(<,>,<=,>=,==,![KG-*8]=)。
6、(3)逻辑运算符(!,&&,||)。
7、(4)位运算符(<<,>>,~,|, ^,&)。
8、(5)赋值运算符(=,及其双目运算符的扩展赋值运算符)。
9、(10)强制类型转换运算符((类型))。