表达式从右向左计算也就是程序中的y+=y-=m*=y;相当于:
m=m*y;
y=y-m;
y=y+y;
所以程序的执行结果是:
从左往右分解,y+=y-=m*=y 就是 y=y+(y-=m*=y)
y-=m*=y 就是 y=y-(m*=y)
m*=y 就是 m=m*y
那么就等于:
m=m*y;//m=10,y=2
y=y-m;//m=10,y=-8
y=y+y;//m=10,y=-16
y为-16
扩展资料:
嵌套循环(LOOP JOIN)类似于C语言编程时的双重循环。作为外层循环逐行扫描的表,针对外部输入表的每一行,适用于外部输入表的行数较少,内部输入表创建了索引的情形。
合并连接(MERGE JOIN)类似于两个有序数组的合并。两个输入表都在合并列上排序;然后依序对两张表逐行做连接或舍弃。如果预先建好了索引,合并连接的计算复杂度是线性的。
参考资料来源:百度百科-连接
y+=y-=m*=y;
按照运算优先级
y+= (A)
需要先计算 (A),不然根本不知道y要加多少
(A) = y-=(B)
需要先计算(B),不然根本不知道y要减多少
(B)=m*=y = 10
得出了(B)的值,接下来计算 y-=(B) 即(A)的值 得出 y=-8
得出y的值后计算y+= (A)
即: -8+=(-8) = -16
明白了?
这种自加自减的运算是从右往左的,所以先算m*=y,m=m*y=10;y-=10,y=y-10=-8;但是现在的y经是-8了,而不是2,所以最后y+=-8,y=-8-8=-16
从右向左读
M*=Y // M=M*Y 此时M=10 Y=2 表达式=10
Y-=M // Y=Y-M 此时Y=2-10=-8
Y+=Y // Y=Y+Y 此时Y=-8 + -8 =-16