8.1.2.4 运算符优先级和结合性

M语言中,表达式的运算是根据某些约定、求值次序、结合性和优先级规则进行的。

所谓约定就是值类型转换,如“int a; a = 3.4;”,因为3.4是浮点数,而a是整型,是不不能存放小数的,因此将3.4截断成3放到a对应的存储单元中,类型转换参考8.1.2.3 类型转换

所谓求值次序是指表达式中各个运算符所带的操作数的求值顺序。如加法运算符(+):

<表达式1> + <表达式2>

M语言编译器先计算表达式1的值然后计算表达式2的值,最后将两者的进行相加。

所谓优先级是指同一个表达式中,多个运算符相邻出现是,总是先处理优先级高的运算符,而不管他们位置上的前后关系,如计算以下表达式的值:

d = 2 + 4 * 5;

 因为乘法运算符“*”优先级比加法运算符“+”高,因此先处理4 * 5,再处理2 + 20;把22的值赋值给左边的变量d。运算符的优先级决定了相邻两个运算符的处理顺序,优先级越高的先处理。

运算符的结合性是指相邻的几个优先级相同的运算符的运算符顺序,结合性也称为结合方向,统一的规则是从左到右的方向依次运算,即运算对象先与左面的运算符结合,也就是从左到右运算。例如:

d = 2 / 3 * 6;  //M语言乘除的运算符优先级相同,结合性从左到右,先做2/3,结果再乘4

在编写程序的过程中,如果对某些运算符的优先级不什么清楚,可以通过将一个运算符以及其操作数用小括号()括起来,以提高该运算符的运算级别。因此M语言中国小括号()具有最高的优先级,系统会强迫小括号中的子表达式被优先处理。

M语言运算符的优先级