首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

位操作与乘除法,该怎么处理

2013-01-07 
位操作与乘除法比如1.(3+7)/22.(3+7)1位操作会不会快很多[解决办法]我用g++4.1.3做了测试。得到的汇编

位操作与乘除法
比如
1.(3+7)/2;
2.(3+7)>>1;
位操作会不会快很多
[解决办法]
我用g++4.1.3做了测试。得到的汇编文件是一致的。

//2.cpp
main()
{
    8 >> 1;
    //8/2;
}

汇编文件:2.s
        .file   "2.cpp"
        .text
        .align 2
.globl main
        .type   main, @function
main:
.LFB2:
        pushq   %rbp
.LCFI0:
        movq    %rsp, %rbp
.LCFI1:
        movl    $0, %eax
        leave
        ret
.LFE2:
        .size   main, .-main
.globl __gxx_personality_v0
        .section        .eh_frame,"a",@progbits
.Lframe1:
        .long   .LECIE1-.LSCIE1
.LSCIE1:
        .long   0x0
        .byte   0x1
        .string "zPR"
        .uleb128 0x1
        .sleb128 -8
        .byte   0x10
        .uleb128 0x6
        .byte   0x3
        .long   __gxx_personality_v0
        .byte   0x3
        .byte   0xc
        .uleb128 0x7
        .uleb128 0x8
        .byte   0x90
        .uleb128 0x1
        .align 8
.LECIE1:
.LSFDE1:
        .long   .LEFDE1-.LASFDE1
.LASFDE1:
        .long   .LASFDE1-.Lframe1
        .long   .LFB2
        .long   .LFE2-.LFB2
        .uleb128 0x0
        .byte   0x4
        .long   .LCFI0-.LFB2
        .byte   0xe
        .uleb128 0x10
        .byte   0x86
        .uleb128 0x2
        .byte   0x4
        .long   .LCFI1-.LCFI0
        .byte   0xd
        .uleb128 0x6


        .align 8
.LEFDE1:
        .ident  "GCC: (GNU) 4.1.3 20080704 (prerelease) (Ubuntu 4.1.2-27ubuntu1)"
        .section        .note.GNU-stack,"",@progbits


[解决办法]
如果不考虑编译器私下里的优化,位移操作要比直接乘除要快很多很多

热点排行