#include <stdio.h>
unsigned long bits0(unsigned long num) {
int count = 0; while(num) num >>=1, ++count; return count;
}
unsigned long bits1(unsigned long num) {
int float_order_le = 1;
union { unsigned int u[2]; double d; } t;
t.u[float_order_le] = 0x43300000;
t.u[!float_order_le] = num;
t.d -= 4503599627370496.0;
return ((t.u[float_order_le] >> 20) - 0x3FF) + 1;
}
int main(int argc, char **argv) {
unsigned long d = 0x01000001;
printf("%lu\n%lu", bits0
(d
), bits1
(d
));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+Cgp1bnNpZ25lZCBsb25nIGJpdHMwKHVuc2lnbmVkIGxvbmcgbnVtKSB7CglpbnQgY291bnQgPSAwOyB3aGlsZShudW0pIG51bSA+Pj0xLCArK2NvdW50OyByZXR1cm4gY291bnQ7CQp9Cgp1bnNpZ25lZCBsb25nIGJpdHMxKHVuc2lnbmVkIGxvbmcgbnVtKSB7CiAgaW50IGZsb2F0X29yZGVyX2xlID0gMTsKICB1bmlvbiB7IHVuc2lnbmVkIGludCB1WzJdOyBkb3VibGUgZDsgfSB0OwogIHQudVtmbG9hdF9vcmRlcl9sZV0gPSAweDQzMzAwMDAwOwogIHQudVshZmxvYXRfb3JkZXJfbGVdID0gbnVtOwogIHQuZCAtPSA0NTAzNTk5NjI3MzcwNDk2LjA7CQogIHJldHVybiAoKHQudVtmbG9hdF9vcmRlcl9sZV0gPj4gMjApIC0gMHgzRkYpICsgMTsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgdW5zaWduZWQgbG9uZyBkID0gMHgwMTAwMDAwMTsKICBwcmludGYoIiVsdVxuJWx1IiwgYml0czAoZCksIGJpdHMxKGQpKTsKCiAgcmV0dXJuIDA7Cn0=