我正在编写一个函数来处理传入的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;
Run Code Online (Sandbox Code Playgroud)
现在它可以工作,但我不喜欢它必须检查每一位,检查位1并转移整个事情.如果有保证只有1位设置,这不会太难以弄清楚,但事实并非如此.
编辑:对于Neil,我想我希望找到一种方法来在恒定时间内获得XOR之后的位置,而不是一直移动缓冲区并逐个检查位.
Run Code Online (Sandbox Code Playgroud)uint32_t temp=oldBuffer^newBuffer, ntemp=newBuffer; for(int b=0;temp;++b,temp>>=1,ntemp>>=1) if(temp&1) processNumber(b,ntemp&1);
| 归档时间: |
|
| 查看次数: |
2181 次 |
| 最近记录: |