关于C和JAVA自增运算符++的一些问题
首先让我们来看一段简单的C语言和Java代码
C语言
#include <stdio.h>
int main(){
int i1=0,j2=0;
int j1=i1++;//i1=1,j1=0
int j2=++i2;//i2=1,j2=1
printf("%d,%d,%d,%d",i1,j1,i2,j2);
return 0;
}
Java
public class demo {
public static void main(String[] args) {
int i1=0,i2=0;
int j1=i1++;//i1=1,j1=0
int j2=++i2;//i2=1,j2=1
System.out.println(i1+" "+j1+" "+i2+" "+j2);
}
}
就基本规则而言C语言和Java还是一样的,++i 是先自增再参加取值,而 i++ 是先取值再自增 ,但是我在看一些题目时发现了不一样的地方;
C
#include <stdio.h>
int main(){
int i1=0,i2=0,i3=0;
int j1=(++i1)+(++i1);//i1=2,j1=2+2=4
int j2=(++i2)+(++i2)+(++i2);//i2=3,j2=2+2+3=7
int j3=((++i3)+(++i3))+((++i3)+(++i3));//i2=4,j2=2+2+4+4=12
printf("%d,%d,%d,%d,%d,%d",i1,j1,i2,j2,i3,j3);
return 0;
}
Java
public class demo {
public static void main(String[] args) {
int i1=0,i2=0,i3=0;
int j1=(++i1)+(++i1);//i1=2,j1=1+2=3
int j2=(++i2)+(++i2)+(++i2);//i2=3,j2=1+2+3=6
int j3=((++i3)+(++i3))+((++i3)+(++i3));//i3=4,j3=1+2+3+4=10
System.out.println(i1+" "+j1+" "+i2+" "+j2+" "+i3+" "+j3);
}
}
C语言中 ++i 和 ++i 运算时会直接加两次再运算,甚至让我误以为C语言中++的优先级更高,然后我又试了以上i2和i3的做对比,发现的确还是括号的优先级更高。
后面查资料,发现C语言中最多只能两个值运算,且运算时调用同一个变量先自增的时候就会加2,而不是像Java中可以从左到右(括号内优先)一步步运算。
关于出栈入栈的知识只是稍微懂一点,但是想再搜一些关于C语言和Java计算的原理却不知道在哪去找。可以麻烦各位大神指点一下吗?