#include <stdio.h>
/* Number of bits in inttype_MAX, or in any (1<<b)-1 where 0 <= b < 3E+10 */
#define IMAX_BITS(m) ((m) /((m)%0x3fffffffL+1) /0x3fffffffL %0x3fffffffL *30 \
+ (m)%0x3fffffffL /((m)%31+1)/31%31*5 + 4-12/((m)%31+3))
#define UNSIGNED_BIT IMAX_BITS((unsigned)-1)
int main(void) {
unsigned x = 4711;
unsigned mask = 1U << (UNSIGNED_BIT - 1); // most significant bit
while (mask && !(x&mask)) mask >>= 1; // ignore leading zeros
if (mask) // still bits to process ?
{
for (; mask; mask >>= 1)
{
// output '0' or '1'
// !! normalizes the result of the bitwise and to 0 or 1
}
}
else putchar('0'); // if only 0 bits found, output 0
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovKiBOdW1iZXIgb2YgYml0cyBpbiBpbnR0eXBlX01BWCwgb3IgaW4gYW55ICgxPDxiKS0xIHdoZXJlIDAgPD0gYiA8IDNFKzEwICovCiNkZWZpbmUgSU1BWF9CSVRTKG0pICgobSkgLygobSklMHgzZmZmZmZmZkwrMSkgLzB4M2ZmZmZmZmZMICUweDNmZmZmZmZmTCAqMzAgXAogICAgICAgICAgICAgICAgICArIChtKSUweDNmZmZmZmZmTCAvKChtKSUzMSsxKS8zMSUzMSo1ICsgNC0xMi8oKG0pJTMxKzMpKQojZGVmaW5lIFVOU0lHTkVEX0JJVCBJTUFYX0JJVFMoKHVuc2lnbmVkKS0xKQoKaW50IG1haW4odm9pZCkgewoJdW5zaWduZWQgeCA9IDQ3MTE7CgkKCXVuc2lnbmVkIG1hc2sgPSAxVSA8PCAoVU5TSUdORURfQklUIC0gMSk7IC8vIG1vc3Qgc2lnbmlmaWNhbnQgYml0Cgl3aGlsZSAobWFzayAmJiAhKHgmbWFzaykpIG1hc2sgPj49IDE7IC8vIGlnbm9yZSBsZWFkaW5nIHplcm9zCglpZiAobWFzaykgLy8gc3RpbGwgYml0cyB0byBwcm9jZXNzID8KCXsKCQlmb3IgKDsgbWFzazsgbWFzayA+Pj0gMSkKCQl7CgkJCS8vIG91dHB1dCAnMCcgb3IgJzEnCgkJCS8vICEhIG5vcm1hbGl6ZXMgdGhlIHJlc3VsdCBvZiB0aGUgYml0d2lzZSBhbmQgdG8gMCBvciAxCgkJCXB1dGNoYXIoJzAnICsgISEoeCZtYXNrKSk7CgkJfQoJfQoJZWxzZSBwdXRjaGFyKCcwJyk7IC8vIGlmIG9ubHkgMCBiaXRzIGZvdW5kLCBvdXRwdXQgMAoJCglwdXRjaGFyKCdcbicpOwoJCglyZXR1cm4gMDsKfQo=