【发布时间】:2012-12-15 05:13:58
【问题描述】:
好的,伙计们,我知道我想做什么,但我不知道它是否已经存在(作为一个函数或理论上)或者如何表达它,所以我需要你的帮助:
- 假设我们有一个二进制数:(msb)
10101110(lsb) - 从位 X 开始,我想在遇到第一个零位时将所有其他位清零(向左)。
- 尽可能快速做到这一点,所需的操作和 CPU 周期绝对最少
一个例子:
- 编号 = 10101110,起始位置 = 1(位置 1 的位 = 1)
- 位置++ - 位置 2 = 1,继续前进
- 位置++ - 位置 3 = 1,继续前进
- position++ - 位置 4 = 0,哎呀……遇到零……现在,所有内容都必须归零。
因此,我们的假想函数 CROPLEFT(X,POS)(其中 X=10101110 和 POS=1)的最终结果将返回 00001110。
有什么想法吗?
【问题讨论】:
-
@MitchWheat 相信我,我已经写满了整个笔记本,里面装满了各种极端位图操作的草图。我能想到的就是这个包括一个循环(我绝对希望避免)。
-
@MitchWheat 他说这可能不是最快的方法。我同意他的看法。
-
@MitchWheat 这将被执行几百万次,所以它肯定会杀死速度,这就是原因。
-
@MitchWheat 每秒。 (以及其他十几个计算):-)
-
@MitchWheat 好的,无需保密:这是我的国际象棋引擎项目的移动生成算法的一部分。所以,如果你曾经玩过国际象棋编程和位图,你就会知道我在说什么...... ;-)
标签: c++ c 64-bit bit-manipulation