自增 自减 java和c的区别

 

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值