【发布时间】:2009-08-20 16:57:59
【问题描述】:
我正在编写一个函数来处理传入的 32 位缓冲区,表示在将数据与相应存储的 32 位缓冲区进行比较时发生变化的数据。变化位的位置表示需要处理的数字(即值 8 表示位 3),以及变化是 0->1 还是 1->0。这是当前的实现,请帮助我改进它!请注意,这不是实际代码,它已被简化为与上下文无关。
uint32_t temp = oldBuffer ^ newBuffer;
uint32_t number = 0;
while (temp != 0)
{
if (temp & 0x1)
{
uint32_t bitValue = 0;
if ((newBuffer& (1 << number)) != 0) bitValue = 1;
processNumber(number, bitValue);
}
number++;
temp = temp >> 1;
}
oldBuffer = newBuffer;
现在它可以工作,但我不喜欢它必须通过检查位 1 并在整个过程中移动来检查每个位。如果保证只有 1 位设置,那并不难弄清楚,但事实并非如此。
编辑:对于 Neil,我想我希望找到一种方法来在恒定时间内获取 XOR 之后的位位置,而不是一直移动通过缓冲区并逐个检查位。
【问题讨论】:
-
可以使用标准库吗?
标签: c++ c bit-manipulation