很久以前发过一个相关的随笔:
反转一个字节的算法
以及相关的效率探讨:
效率的边界--几种反转字节算法分析
昨天 周星星 旧事重提,又引发了对这个简单问题的讨论,相关的东西以前已经讨论了很多了,这里不再重复,只提供两个新的算法:
首先是周星星的新算法:
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
经过测试,这是目前在32位环境,除查表法之外的最高效算法。
我也尝试了一下,要超越这个算法的效率的确很难,几经周折也没有能够成功。不过这个过程中,考虑了另外一个算法,需要64位环境的支持,代码如下:
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
这个算法的本质还是查表法,但是利用64bit变量代替了表,利用移位代替了查表过程中的寻址。
理论上这个算法应该有更高的效率,尽管仍然无法超越原始的查表法。
但是因为我没有64位的编译环境和运行环境,所以在此恳请有条件的朋友帮忙测试一下这两个代码在64位环境下的表现,参考的测试代码如下:
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/None.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://blog.vckbase.com/Images/dot.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/InBlock.gif)
![](http://blog.vckbase.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
由于对64位环境近乎无知,所以代码可能无法直接编译运行,仅供参考。
谢谢合作:)