#include <stdio.h>

//representa uma valor decimal em binário com 4 bits
void print_binary(unsigned n) {
    unsigned i;
    for (i = 1 << 3; i > 0; i = i >> 1)
        (n & i) ? printf("1") : printf("0");
}


int main() {
   short a = 5;      // 0101
   short b = 1;      // 0001

   printf("a = %d, b = %d\n", a, b);
   print_binary(a);
   printf(" e ");
   print_binary(b);

   printf("\n a&b = %d - ", a & b);
   print_binary(a&b); // 0001

   printf("\n a|b = %d - ", a | b);
   print_binary(a|b); // 0101

   printf("\n a^b = %d - ", a ^ b);
   print_binary(a^b); // 0100

   printf("\n ~a = %d - ", ~a);
   print_binary(~a); // 1010
   
   printf("\n ~b = %d - ", ~b);
   print_binary(~b); // 1010

   printf("\n a<<1 = %d - ", a << 1);
   print_binary(a << 1); // 10 1010

   printf("\n a>>1 = %d - ", a >> 1);
   print_binary(a>>1); // 2 0010

   printf("\n b<<2 = %d - ", b << 2);
   print_binary(b<<2); // 4 0100

   printf("\n b>>2 = %d - ", b >> 2);
   print_binary(b>>2); // 0 0000
}