#include #include /* * Generate mask indicating leftmost 1 in x. Assume w=32. * For example, 0xFF00 -> 0x8000, and 0x6600 --> 0x4000. * If x = 0, then return 0. */ int leftmost_one(unsigned x) { unsigned t = x; t >>= 1; t |= t >> 1; t |= t >> 2; t |= t >> 4; t |= t >> 8; t |= t >> 16; return (t + 1) & x; } int main() { for (unsigned x = 0; ; x++) { assert((x == 0 && leftmost_one(x) == 0) || (x != 0 && leftmost_one(x) == (1 << (31 - __builtin_clz(x))))); if (x == UINT_MAX) { break; } } }