C++ BUILDER中*256与 << 8 的效率,结论:一样

来源:互联网 发布:win7查找网络打印机 编辑:程序博客网 时间:2024/06/10 12:41

我们在 C++ BUILDER中常常需要将一个数*256,它与<<8的效率究竟哪个好一些?我们觉得移位效率更高,实际情况如何呢?

有如下两个语句:

lngDataLen = chrData[0] * 256 ; //长度,使用乘法
lngDataLen = chrData[0] << 8;   //长度,使用移位

以下是程序运行时的DEBUG窗口。

Unit1.cpp.365: lngDataLen = chrData[0] * 256 ; //长度,使用乘法
00403461 33C0             xor eax,eax
00403463 8A852CFFFFFF     mov al,[ebp-$000000d4]
00403469 C1E008           shl eax,$08
0040346C 898568FFFFFF     mov [ebp-$00000098],eax


Unit1.cpp.366: lngDataLen = chrData[0] << 8;   //长度,使用移位
00403472 33D2             xor edx,edx
00403474 8A952CFFFFFF     mov dl,[ebp-$000000d4]
0040347A C1E208           shl edx,$08
0040347D 899568FFFFFF     mov [ebp-$00000098],edx

 

结论:二者运行效率相同。

注意:若是使用 << 时,要注意它的优先级,需要加上括号,如:

lngDataLen = (chrData[0] << 8 ) + chrData[1];
其它:以上在C++ Builder 6/C++ Builder 2009中调试。

原创粉丝点击