Royce Mitchell III schrieb:
I managed to shave off another comparison in favor of a shift:
What about using a 64k table?
static BYTE HighestBits[65536] = { 0x00, 0x01, 0x02, 0x02, ... // and so on };
// returns 0xFF when no bits set in dwValue BYTE highest_bit(DWORD dwValue) { BYTE ret; if (i > 0xffff) { ret = HighestBits[(int) (dwValue >> 16)]; } else { ret = HighestBits[(int) dwValue]; } return ret - 1; }
Regards, Mark