C语言的运算符的优先级和结合性

C语言规定了运算符的优先级和结合性。在表达式求值时,先按运算符的优先级别高低次序执行,例如先乘除后加减。如表达式a-b*c,b的左侧为减号,右侧为乘号,而乘号优先于减号,因此这个表达式相当于a-(b*c) ,如果在一个运算对象两侧的运算符的优先级别相同,例如a-b+c,则按照规定的结合方向处理。

C语言还规定了各种运算符的结合方向,众所周知的是,算术运算符的结合方式为“自左向右”,即先左后右,因此b先与减号结合,执行a-b的运算,再执行加c的运算。“自左至右的结合方向”,又称左结合性,即运算对象先与左面的运算符结合。在C语言钟有些运算符的结合方向是“自左至右”,即右结合性。 如赋值语句:

	a=b=c=d;

其执行顺序是自右向左的,先把d的值赋给c,再把c的值赋给b,然后把b的值赋给a,假如d的值是3,则最后的a,b,c,d的值都为3 。 这显然是右结合性,例如变量c的两侧都有赋值运算符,优先级相同,按右结合性,先和右侧的赋值运算符结合,执行c=d的操作,其余类推。++与- -运算符的结合方式也是自右至左的。如有a=-i++,变量i的两侧的运算符-和++的优先级相同,那么 i 先是和左面的负号结合

注: 是将其理解为 (-i)++还是和右边的++结合成-(i++)呢?

按照右结合性来看,是后者才对。为了避免混淆,可以将不必要的括号加上,便于理解。

Guess you like

Origin blog.csdn.net/qq_32100603/article/details/109459588