c++ - 帮我改进这个 C++ 位缓冲处理代码

标签 c++ c bit-manipulation

我正在编写一个函数来处理传入的 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 之后的位的位置,而不是一路移动通过缓冲区并一个一个地检查位。

最佳答案

uint32_t temp=oldBuffer^newBuffer, ntemp=newBuffer;
for(int b=0;temp;++b,temp>>=1,ntemp>>=1)
    if(temp&1) processNumber(b,ntemp&1);

关于c++ - 帮我改进这个 C++ 位缓冲处理代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1307527/

相关文章:

c++ - 我正在尝试通过使用访问器和增变器函数从 main() 将值存储在类中的变量中

c++ - 我如何使用模板化的 typedefs,它们是_in_一个类,来自类外部(例如,由另一个类),与 boost::graph 相关

libpcap 中传出数据包的正确过滤器表达式

c++ - C++ 中的 toString 覆盖

c++ - 右值作为左值

c - 这段 C 代码有什么问题?

c - 如何在 header 中构造函数,在源代码中定义

c++ - 在32位数字中查找第一个(最低)置位位置

algorithm - 最平衡二分的排列

math - 将整数限制为 0-255 并将双倍限制为 0.0-1.0 的技巧?