#include // variante de tiparire a unui numar in baza 2 // recursiv, prin impartire succesiva la 2 void printbits(unsigned n) { if (n > 1) printbits(n / 2); putchar(n % 2 + '0'); } // la fel, inlocuind operatiile aritmetice cu operatii pe biti void printbits2(unsigned n) { if (n > 1) printbits2(n >> 1); putchar((n & 1) + '0'); } // tipareste pe un numar dat de biti void printkbits(unsigned n, unsigned k) { if (k > 1) printkbits(n / 2, k - 1); putchar(n % 2 + '0'); } // tipareste toti bitii, deplasand o masca la dreapta void printallbits(unsigned n) { unsigned mask = ~(~0u >> 1); do { putchar((n & mask) ? '1' : '0'); mask >>= 1; } while (mask); } // tipareste toti bitii, deplasand numarul la stanga si testand bitul de semn void printallbits2(unsigned n) { unsigned bits = 8*sizeof(n); while (bits--) { putchar((int)n < 0 ? '1' : '0'); n <<= 1; } } // tipareste bitii in ordine inversa (pe numar minim de biti) void printrevbits(unsigned n) { do { putchar((n & 1) + '0'); n >>= 1; } while (n); } // citeste un numar introdus in baza 2 unsigned readbase2(void) { unsigned r = 0; int c = getchar(); while (c == '0' || c == '1') { r = (r << 1) | (c - '0'); c = getchar(); } ungetc(c, stdin); return r; } int main(void) { printbits(19); putchar('\n'); printbits2(19); putchar('\n'); printkbits(19, 8*sizeof(19)); putchar('\n'); printallbits(19); putchar('\n'); printallbits2(19); putchar('\n'); printrevbits(19); putchar('\n'); printallbits(readbase2()); putchar('\n'); return 0; }