JAVA
public class Test {
public static void main(String[] args) {
int i = 1000;
int j = 2000;
int a = i++;
int b = ++j;
}
}
汇编
0: bipush 1000 //
2: istore_1 //设置 i=1000 index=1的本地变量
3: sipush 2000
6: istore_2 //设置j=2000; index=2的本地变量
7: iload_1 //把index=1的数据放入操作栈
8: iinc 1, 1 //把index=1的数据加1
11: istore_3 //把操作栈中数据赋值给a
12: iinc 2, 1 //把index=2的数据加1
15: iload_2 //把index=2的数据放入操作栈
16: istore 4 //把操作栈中数据赋值给b
区别:
a=i++ 表示先把i放入操作栈,后更新i在本地变量的值,最后把操作栈的值(没变动过)赋值给a
b=++i 表示先更新本地变量j,后放到操作栈中,再把操作栈中数据赋值给b
C
int main(void) {
int i = 1000;
int j = 100;
int a = i++;
int b = ++j;
}
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
movl $1000, -20(%ebp) //栈ebp-20位置的值为1000 表示i
movl $100, -16(%ebp) //栈ebp-16位置的值为2000 表示j
movl -20(%ebp), %eax //把栈ebp-20位置的值1000 放入eax
movl %eax, -12(%ebp) //把eax的值放入ebp-12 表示a
addl $1, -20(%ebp) //把栈ebp-20的值+1
addl $1, -16(%ebp) //把栈ebp-16的值+1
movl -16(%ebp), %eax //把栈ebp-16的值放入eax
movl %eax, -8(%ebp) //把eax的值放入栈ebp-8 表示b
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
区别:
a=i++ 表示先把i的值赋给a,然后给i加1
a=++i 表示先把i的值加1,然后赋值给a
分享到:
相关推荐
介绍Java和C语言中的自增和自减区别,如a++和a--的区别。
C语言自增运算符的置于变量前和变量后的区别与理解自加自减运算符的概念:在普通语句定义并用printf函数输出结果for循环中作为判断条件结语Reference 自加自减运算符的概念: 自增自减运算符存在于C/C++/C#/Java/...
源语言要求至少包含的语言成分如下: 数据类型至少包括char类型、int类型和float类型 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算 控制语句至少包括if语句和while语句 实验内容:完整可运行的...
2.3.4 自增和自减运算符 2.3.5 更多的整数运算符 2.3.6 使用点运算符 2.3.7 instanceof运算符 2.3.8 优先级顺序 2.3.9 关于运算符的记忆要点 2.4 条件语句 2.4.1 switch语句 2.4.2 Java中的循环语句 2.4.3 用break、...
2.3 掌握C语言的自增和自减运算符要点 在C语言表达式中,如果出现自增或自减运算符,一般比拟容易改变表达式中变量值,或者弄错其值的计算。主要的改变如下: 如果是前缀自增或自减,就是运算符在使用前自动增加或...
47 3.1.4 “/”:除法运算符 48 3.1.5 “%”:求余运算符 48 3.2 自增自减运算符 49 3.3 关系运算符 51 3.3.1 “==”、“!=” 51 3.3.2 “>”、“<”、“>=”、“” 52 3.4 逻辑运算符 53 3.4.1 “&&”:与运算符 ...
2.8 自增运算符与自减运算符 2.9 按位运算符 2.10 赋值运算符与表达式 2.11 条件表达式 2.12 运算符优先级与求值次序 第3章 控制流 3.1 语句与程序块 3.2 if-else语句 3.3 else-if语句 3.4 switch语句 3.5...
2.12 自增和自减运算符 2.13 计数器控制循环的要点 2.14 for重复结构 2.15 for结构使用举例 2.16 switch多项选择结构 2.17 do/while重复结构 2.18 break和continue语句 2.19 逻辑运算符 2.20 混淆相等(....
2.12 自增和自减运算符 2.13 计数器控制循环的要点 2.14 for重复结构 2.15 for结构使用举例 2.16 switch多项选择结构 2.17 do/while重复结构 2.18 break和continue语句 2.19 逻辑运算符 2.20 混淆相等(....
在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。 当这些语言的用户进入Python时,他们
在java关键字synchronized隐式支持重入性(关于synchronized可以看这篇文章),synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。 那么,要想完完全全的...
3.2 自增自减运算 27 3.3 关系运算 28 3.3.1 等于/不等于运算 28 3.3.2 比较大小运算 29 3.4 逻辑运算 30 3.4.1 “与”运算 30 3.4.2 “或”运算 31 3.4.3 “非”运算 32 3.5 三元运算符 32 3.6 ...
2.12 自增与自减运算符-------------------------------------------------58 2.13 计数器循环的要点-------------------------------------------------60 2.14 for重复结构---------------------------------...