`
benx
  • 浏览: 272917 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

自增 自减 java和c的区别

    博客分类:
  • java
 
阅读更多

 

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语言的自增_自减_运算符辨析

    介绍Java和C语言中的自增和自减区别,如a++和a--的区别。

    C语言自增自减运算符的区别与理解

    C语言自增运算符的置于变量前和变量后的区别与理解自加自减运算符的概念:在普通语句定义并用printf函数输出结果for循环中作为判断条件结语Reference 自加自减运算符的概念: 自增自减运算符存在于C/C++/C#/Java/...

    华中科技大学 编译原理 面向过程的C语言的编译器设计 含有词法分析和语法分析、语义分析、中间代码生成的 源码.zip

    源语言要求至少包含的语言成分如下: 数据类型至少包括char类型、int类型和float类型 基本运算至少包括算术运算、比较运算、自增自减运算和复合赋值运算 控制语句至少包括if语句和while语句 实验内容:完整可运行的...

    Java2游戏编程.pdf

    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、...

    计算机程序设计的要点与规范分析-.docx

    2.3 掌握C语言的自增和自减运算符要点 在C语言表达式中,如果出现自增或自减运算符,一般比拟容易改变表达式中变量值,或者弄错其值的计算。主要的改变如下: 如果是前缀自增或自减,就是运算符在使用前自动增加或...

    21天学通Java-由浅入深

    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 “&&”:与运算符 ...

    C程序设计语言(第2版·新版中文)

    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...

    C++大学教程,一本适合初学者的入门教材(part2)

    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++大学教程,一本适合初学者的入门教材(part1)

    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 混淆相等(....

    Python不支持 i ++ 语法的原因解析

    在C / C ++ / Java之类的语言中,对整数变量进行自增或自减运算是标准的,可以分为前缀运算(++ i和–i)和后缀运算(i ++和i–), 每个都有细微的差异和不同的目的。 当这些语言的用户进入Python时,他们

    教你完全理解ReentrantLock重入锁

    在java关键字synchronized隐式支持重入性(关于synchronized可以看这篇文章),synchronized通过获取自增,释放自减的方式实现重入。与此同时,ReentrantLock还支持公平锁和非公平锁两种方式。 那么,要想完完全全的...

    javaSE代码实例

    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 ...

    C++大学教程

    2.12 自增与自减运算符-------------------------------------------------58 2.13 计数器循环的要点-------------------------------------------------60 2.14 for重复结构---------------------------------...

Global site tag (gtag.js) - Google Analytics