正在阅读:巧用Win32 API函数增强VB位操作功能巧用Win32 API函数增强VB位操作功能

2005-09-15 10:14 出处: 作者:刘琦 责任编辑:moningfeng

3.移位运算的性能优化

  本文中的移位实现方法偏重于代码的可读性,没有优化代码的性能,因此不适用于对性能要求苛刻的场合。为了优化性能,可以用查表法来优化执行速度,这是一种拿空间换时间的方案,移位结果可以事先都计算出来,保存在移位表中,用的时候查表,比用*2,/2快多了。比如,字节类型的移位表数组定义如下: 

  dim aSHLB(0 to 255,1 to 7) as byte'字节左移表

  dim aSHRB(0 to 255,1 to 7) as byte'字节右移表


  使用方法也很简单,比如想要求字节变量x左移一位的结果,只需使用aSHLB(x,1)就可得到,和函数调用很相似。当然,与函数调用不同的是,使用移位表之前一定要初始化移位表的所有元素,否则会得到错误的结果。

  Integer类型的移位也可以用查表法,移位表占用 65535 * 15 * 2 * 2 个字节的内存空间。

  移位表数组定义如下:

  aSHLW(0 to &Hffff&,1 to 15) as integer'单字的左移表

  aSHRW(0 to &Hffff&,1 to 15) as integer'单字的右移表


  注意:Integer是有符号类型,造表的时候要用它的无符号值来造表,同样查表的时候也要用它的无符号值来查表。(因为数组下标是不允许负数的。)

  求Integer类型无符号值的方法是:(Int and &hFFFF&),注意,不等同于CLng(Int)

  遗憾的是,Long类型无法造表,因为Long类型的值的范围是 4 GB,如果对它造表,那么表的大小就会超出总的内存地址空间。

  查表移位的代码请参见本文附带的代码,这里就不给出了。

三 结语

  要想实现本文所述的那些位操作函数其实有很多方法,本文所用的方式未必是最好的,主要是为了提供一种解决问题的思路:在编程过程中遇到难以解决的问题时,想一想能不能把大问题分解成能解决或已解决的小问题,这就是“分而治之”的策略。因笔者水平有限,本文难免会有疏漏和不足之处,欢迎批评指正,有意见或建议给我发电子邮件liuqi5521@sina.com

  本程序在 Win2000+VB6.0下调试通过。
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品