读书人

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

发布时间: 2013-01-07 10:02:25 作者: rapoo

位操作与乘除法
比如
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


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

读书人网 >C++

热点推荐