Skip to content

Instantly share code, notes, and snippets.

@DigiTec
Created August 25, 2014 06:51
Show Gist options
  • Save DigiTec/82af6cb6dc16836a517e to your computer and use it in GitHub Desktop.
Save DigiTec/82af6cb6dc16836a517e to your computer and use it in GitHub Desktop.
A bunch of bit ops where you need some "magic numbers" now logged in my gists for posterity.
bool PowerOf2(unsigned long value)
{
return (value != 0) && !(value & (value-1));
}
int BitCount(unsigned long value)
{
value = (value & 0x55555555) + ((value & 0xAAAAAAAA) >> 1);
value = (value & 0x33333333) + ((value & 0xCCCCCCCC) >> 2);
value = (value & 0x0F0F0F0F) + ((value & 0xF0F0F0F0) >> 4);
value = (value & 0x00FF00FF) + ((value & 0xFF00FF00) >> 8);
value = (value & 0x0000FFFF) + ((value & 0xFFFF0000) >> 16);
return value;
}
unsigned long BitReverse(unsigned long value)
{
value = ((value & 0x55555555) << 1) | ((value & 0xAAAAAAAA) >> 1);
value = ((value & 0x33333333) << 2) | ((value & 0xCCCCCCCC) >> 2);
value = ((value & 0x0F0F0F0F) << 4) | ((value & 0xF0F0F0F0) >> 4);
value = ((value & 0x00FF00FF) << 8) | ((value & 0xFF00FF00) >> 8);
value = ((value & 0x0000FFFF) << 16) | ((value & 0xFFFF0000) >> 16);
return value;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment