Created
August 25, 2014 06:51
-
-
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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