/* * File: logicke.c * Author: kubalik * * Created on 14. prosince 2015, 19:47 */ #include "xc.h" int main(void) { int i,j,k; unsigned int m,n,p; i = 0x5000; /* prvni instrukce programu, sem breakpoint */ /* do VAriables si dejte promenne * zobrazte si je take jako bin a dec, a divejte se, co to dela */ i = i >> 1; /* posuv doprava o 1 bit */ i = i >> 1; /* posuv doprava o 1 bit */ i = i >> 2; /* posuv doprava o 2 bity */ i = i >> 3; /* posuv doprava o 3 bity */ i = 0x8000; /* */ /* do Variables si dejte promenne * zobrazte si je take jako bin a dec, a divejte se, co to dela */ i = i >> 1; /* posuv doprava o 1 bit */ i = i >> 1; /* posuv doprava o 1 bit */ i = i >> 2; /* posuv doprava o 2 bity */ i = i >> 3; /* posuv doprava o 3 bity */ /* ???????? Proc to je jinak, nez nahore ??????? */ m = 0x8000; /* zda se totez jako nahore, ale typ promenne je jiny */ /* do Variables si dejte promenne * zobrazte si je take jako bin, a divejte se, co to dela */ m = m >> 1; /* posuv doprava o 1 bit */ m = m >> 1; /* posuv doprava o 1 bit */ m = m >> 2; /* posuv doprava o 2 bity */ m = m >> 3; /* posuv doprava o 3 bity */ /* ???????? Proc to je jinak, nez nahore ??????? */ /* posuv funguje i na druhou stranu * !!!! neni to rotace, je to posuv, posledni bit LSB se neprenasi do MSB */ m = m << 4; m = m << 5; m = m << 1; /* logicke funkce * logicke hodnoty TRUE a FALSE se v Ccku vyjadruji jako cisla int * FALSE - cislo 0 * TRUE - cislo ruzne od 0 */ i = 5; /* do i jsem dal hodnotu TRUE */ i = -18; /* do i jsem dal hodnotu TRUE */ i = 2 ; /* do i jsem dal hodnotu TRUE */ i = 1; /* do i jsem dal hodnotu TRUE */ i = 0; /* do i jsem dal hodnotu FALSE */ j = 5; k = 8; i = ( j > 3 ) && ( k < 12 ) ; /* do i ukladam logickou hodnotu vyrazu */ i = ( j > 3 ) && ( k > 12 ) ; /* ale je to klidne mozno udelat i takto*/ i = ( 5 > 3 ) && ( 2 < 8 ) ; /* obe zavorku jsou TRUE , dale dosadime nejakou hodnotu pro TRUE */ i = ( 12 ) && ( -8 ) ; /* a jde to i bez zavorek*/ i = 12 && 78; /* tohle je TRUE AND TRUE */ i = 12 && ( 5 < 8 ); i = 12 && 0; /* a umime i logicke OR - || */ i = 12 || 28 ; /* TRUE OR TRUE */ i = 12 || 0 ; /* TRUE OR FALSE */ i = (12 > 20) || ( 50 < 10 ) ; /* TRUE OR TRUE */ /* bitove funkce * tady se dela kazdy bit zvlast * POZOR !!!! je to snadno zamenitelne s logickymi funkcemi * syntakticky je oboji spravne, ale dela to neco jineho * zdroj castych chyb !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ j = 0x3c2d; /* tady je NUTNO mit ve Variables zapnuto binarni zobrazeni, * jinak nikdy nepochopite, co to dela */ k = 0xe735; i = j & k ; /* bitove AND, je tam JEDNO & * dela se kazdy bit zvlast */ /*hodi se k maskovani, kdyz potrebuji cast bitu vynulovat */ i = j & 0x000f ; /* dolni 4 bity */ i = k & 0xf000; /* horni 4 bity */ i = ( k & 0xf000 ) >> 12 ; /* horni 4 bity posunute dolu * nesetrte zavorkami !!!!!!!!!!!!!!! */ /* no a umime take bitove OR */ i = k | j ; i = k | 0xff00 ; /* maskujeme na 1 v bitech */ i = j | 0x000f; while (1) ; return 0; }