How to de-interleave bits (UnMortonizing?)
What is the most efficient way to de-interleave bits from a 32 bit int? For this particular case, I'm only concerned about the odd bits, although I'm sure it's simple to generalize any solution to both sets. For example, I want to convert 0b01000101 into 0b1011 . What's the quickest way? EDIT: In this application, I can guarantee that the even bits are all zeros. Can I take advantage of that fact to improve speed or reduce space? Given that you know that every other bit is 0 in your application, you can do it like this: x = (x | (x >> 1)) & 0x33333333; x = (x | (x >> 2)) & 0x0f0f0f0f; x = (x |