Help me improve this C++ bit-buffer processing code

bit-manipulation, c, c++

Solution

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

Problem

I am writing a function to process an incoming 32-bit buffer, representing changing data when it is compared to an corresponding stored 32-bit buffer. The position of the changing bit represents a number (i.e. a value of 8 means bit 3) that needs to be processed, along with whether the change is 0->1, or 1->0. Here is the current implementation, please help me improve it! Note that this is not the actual code, it has been simplified to be context-neutral. ``` 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; ``` Right now it works but I don't like that it has to check each bit by checking bit 1 and shifting through the entire thing. If there was guarantee to be only 1 bit set that wouldn't be too hard to figure out, but that's not the case. Edit: To Neil, I guess I am hoping to find a way to get the positions of the bits after the XOR in constant time, instead of shifting all the way through the buffer and checking the bits one by one.

Original source