P
... das bitweise geshifte ist selten wirklich schnell, ein Teil fliegt durch char - Zugriffe flach:
int TheLSBisAt(void *sometype, size_t size)
{
int bitpos, charpos;
unsigned char bit = 1;
for (charpos = 0; (((unsigned char *)sometype)[charpos] == 0) && ((size_t)charpos < size); charpos++);
if (charpos == size)
return -1; // kein Bit gesetzt
bitpos = charpos * 8; // Schwachpunkt, wenn char != 8 Bit
while (bit)
{
if ((((char *)sometype)[charpos]) & bit)
return bitpos;
else
{ ++bitpos; bit<<=1; }
}
return -2; // they should never return
}
call:
{
int i = 256;
printf("Var i has its LSB at Bit:%d\n",TheLSBisAt((void *)&i, sizeof(i)) );
}
Dürfte stimmen und meist schneller sein ... wenn nicht, haut's mich :p