#include #include /* * Generate mask indicating rightmost 1 in x. * For example 0xFF00 -> 0x0100, and 0x6600 --> 0x0200. * If x == 0, then return 0. */ int rightmost_one(unsigned x) { return x & -x; } int main() { for (unsigned x = 0; ; x++) { assert((x == 0 && rightmost_one(x) == 0) || (x != 0 && rightmost_one(x) == (1 << __builtin_ctz(x)))); if (x == UINT_MAX) { break; } } }