在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语言运算符的优先级