如题所述
这个公式是从左向右走的
比如i=5;
先走a i+=i; +=这种算法是先加再等于 i=i+i;这样是不对的 i+=i;整体是10 但是i依然是5,这个不知道你能明白吗?
再往右走因为后面有乘法先做乘法b 同上 i*=i; i一直是5但是 i*=i为25 把i=i*i看成一个整体是25但是i还是5;
再走c的时候 i-=i 其实是i=a-b;就是10-25=-15;追问
首先谢谢,看了你的回答我有两个疑问1.为什么是从左往右走的呢?这个怎么看?2.为什么i的值不变?a+=b相当于a=a+b是不对的吗,你的意思是不是c=a+b,a和b的值都不变,只是整体值变了?
追答第一:算数计算什么的都是从左向右走的,有优先级的,()最高 再就是乘除,最后加减。
第二:i++;i--;i+=;i-=,这四个是自运算,这种自运算是值不变,整体数值变得,还有一种是++i,--i,这种是先运算再赋值给i;比如i=5;int c=i++; 你会发现 c的值5;如果i=5;int c=--i;这种就是先把i的值减一再给c c就是4了;
第三:a+=b相当于a=a+b,是对的,因为的你的后面还有一些其他的对于i的运算,所以是要看整体的,因为你前面的值改变了,后面的还不知道啊,就是用原来的值。
有点绕,就是整体把握就是了,这我也有点说不大清楚,自己做几个例子试试就知道了
大概明白了,但是还有个问题就是一般都是从左到右运算的啊,我好想一直记错了,是不是也有的是从右往左的?而且按照优先级和从左往右计算上面的式子不应该是先*再+最后-吗?
追答都一样,比如正常的数学运算 8+5-4*5,我们是不是先算8+5,再算4*5啊最后再算减法啊。
先算4*5,再算8+5结果一样的,但是运算习惯是从左往右走,遇到乘法再算乘法的啊
package test;
public class test {
public static void main(String[] args) {
int i=2;
System.out.println(i+=i-=i*=i);
}
}
最后输出是0,先是i=2*2=4再是i=4-4=0再是i=0+0=0
首先要确定运算符优先级,确定优先级后就知道怎么算了
优先级:(*=)> (+=) > (-=)
所以这道题的顺序不是从右往左,也不是从左往右,而是先算右边*=,再算左边+=,最后算-=
int i=12;
System.out.println(i+=i-=i*=i);
运算结果为-120,可以自己测试
以下为步骤:
X = (i+=i-=i*=i)
X = i+=i-=( 12 * 12)
X = i+=i-=144
X = (12+12)-=144
X = 24 - 144
X = -120