/*
 * Soubor:  Mon-bitoper.c
 * Datum:   31.01.2011 10:20
 * Autor:   Marek Nožka, nozka <@t> spseol <d.t> cz
 * Licence: GNU/GPL 
 * Úloha:  bitové operace 
 * Popis: >> << & |
 ****************************************************/
#define _GNU_SOURCE
#include <stdio.h>

/****************************************************
 *               Hlavní program.
 ****************************************************/
int main(void) {

    /* 0010 1011   == 43
     * 0011 1100   == 60
     * ---------- & 
     * 0010 1000   == 40 */
    printf("%d & %d == %d \n",43,60, 43 & 60);
    puts("hexa");
    printf("%X & %X == %X \n",43,60, 43 & 60);
    /* to stejné ale konstantu 43 zapíšu v hexa */
    printf("%X & %X == %X \n",0x2B,60, 43 & 60);

    /* to stejné ale ale osmičkově*/
    puts("osmičkově");
    printf("%o & %o == %o \n",053,60, 43 & 60); 
   
    /* 0010 1011   == 43
     * 1111 0000   == 0xF0
     * ---------- | 
     * 1111 1011   == 0xFB */
    puts("součet");
    printf("%X | %X == %X \n",43, 0xF0, 43 | 0xF0);

    /* 0010 1011   == 43
     * 1111 0000   == 0xF0
     * ---------- ^ 
     * 1101 1011   == 0xDB */
    puts("ekvivalence");
    printf("%X ^ %X == %X \n",43, 0xF0, 43 ^ 0xF0);

    /* 1101 1011   == 0xDB 
     *~0010 0100   == 0x24*/
    printf("~ %X == %X \n",0xDB, ~0xDB);

    /* >>, << bitový posun 
     * 0000 0010  == 2
 * <<2 0000 1000  == 8 */
    printf("%X << 2 == %X \n", 0x2, 0x2 << 2);
    printf("%X << 3 == %X \n", 0x4B, 0x4B << 3);
    printf("%X << 8 == %X \n", 0x0C0F, 0x0C0F << 8);
    printf("%X >> 8 == %X \n", 0x0C0F, 0x0C0F >> 8);
    printf("%X >> 4 == %X \n", 0x0C0F, 0x0C0F >> 4);


    return 0;
}

