美文网首页
2021-07-25-🌦🌦 ++A , A++ 区别

2021-07-25-🌦🌦 ++A , A++ 区别

作者: 沐深 | 来源:发表于2021-07-25 19:03 被阅读0次

    相同点

    a++ 和 ++a的都是给a+1

    不同点

    a++是先参加程序的运行再+1,
    而++a则是先+1再参加程序的运行。

    以上纯属废话

    经过和C语汇编分析,在没有中间变量参与的情况下,汇编代码一摸一样

    如果有中间变量,比如 b = a++,编译器会先保存一个值,再++

    ++i

        .section    __TEXT,__text,regular,pure_instructions
        .build_version macos, 10, 15    sdk_version 10, 15
        .globl  _main                   ## -- Begin function main
        .p2align    4, 0x90
    _main:                                  ## @main
        .cfi_startproc
    ## %bb.0:
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        xorl    %eax, %eax // 多这一行😁😁😁😁😁😁
        movl    $0, -4(%rbp)
        movl    $0, -8(%rbp)
        movl    -8(%rbp), %ecx
        addl    $1, %ecx
        movl    %ecx, -8(%rbp)
        movl    %ecx, -4(%rbp)
        popq    %rbp
        retq
        .cfi_endproc
                                            ## -- End function
    
    .subsections_via_symbols
    
    

    i++

        .section    __TEXT,__text,regular,pure_instructions
        .build_version macos, 10, 15    sdk_version 10, 15
        .globl  _main                   ## -- Begin function main
        .p2align    4, 0x90
    _main:                                  ## @main
        .cfi_startproc
    ## %bb.0:
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset %rbp, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
        xorl    %eax, %eax
        movl    $0, -4(%rbp)
        movl    $0, -8(%rbp)
        movl    -8(%rbp), %ecx
        movl    %ecx, %edx
        addl    $1, %edx
        movl    %edx, -8(%rbp)
        movl    %ecx, -4(%rbp)
        popq    %rbp
        retq
        .cfi_endproc
                                            ## -- End function
    
    .subsections_via_symbols
    
    

    Example:

    
    var a = 2;  
    var b = a++;    
    运行后: b = 2,a =3 ;      
    
    
    
    var a = 2;  
    var b = ++a;    
    运行后: b = 3,a =3;
    
    
    
    var a = 3;
    var goos = function(){
      return a++;
    } 
    console.log(goos()); // 3
    
    
    
    var a = 3;
    var goos = function(){
      return ++a;
    } 
    console.log(goos()); // 4
    
    

    for 循环是怎么执行的

    for( var i = 0; i < 10; i++) {
      // do something
      console.log(i)
      // 所有东西执行完了再+1
      // 如果希望从0 开始,i= 
    }
    console.log(i) // 10
    

    等同于

    let i = 0;
    while(i < 10) {
     // do something
      console.log(i)
      i++
    }
    console.log(i) // 10
    

    C语言灵魂拷问:++i为何比i++执行效率高!有何区别?

    相关文章

      网友评论

          本文标题:2021-07-25-🌦🌦 ++A , A++ 区别

          本文链接:https://www.haomeiwen.com/subject/fdsimltx.html