Nejdriv si rozmyslete, jak funguji zakladni bitove operatory &, |, ^, <<, >>, ~. Jak funguje v bitove reprezentaci operace +? Jak jsou reprezentovana zaporna cisla? Co znamena "dvojkovy doplnek"? (Rozmyslete si priklady.) Jak poznam znamenko cisla? Jake vyhody ma dvojkovy doplnek vuci ostatnim reprezentacim? (i-a) Jak vyrobit hodnotu, ktera ma vsechny bity nastavene na 0? (i-b) Vsechny bity nastavene na 1? (ii-a) Naimplementujte funkci bool bitat(unsigned char b, int k), ktera vrati hodnotu k-teho bitu. Zamyslete se nad pojmem "bitova maska". (ii-b) Naimplementujte funkci unsigned char bitset(unsigned char b, int k, bool x), ktera vrati hodnotu b s k-tym bitem nastavenym na x. (ii-c) Naimplementujte funkci unsigned char ror(unsigned char b, int k), ktera vrati hodnotu b orotovaneho o k bitu vpravo (tedy jako shift, ale bity mizejici vpravo zase pritekaji zleva). (iii-a) Jak overit, zda je dane cislo mocninou dvojky? (2^k - pozor, ^ zde neni xor :) Jak takove cislo v binarnim zapisu vypada? (iii-b) Jak overit, zda je dane cislo (2^k)-1? Jak cislo binarne vypada? (iv) Jak najit v hodnote nejnizsi 1-bit? ---- Hinty a reseni Dvojkovy doplnek je zajimavy ze dvou hlavnich duvodu - mame unikatni nulu a bitovy algoritmus pro scitani korektne funguje i se zapornymi cisly a s mixem kladnych a zapornych cisel. (ii-b) V pripade funkce bitset() je slozitejsi varianta, kdy x == 0. Musime nejdriv vypnout k-ty bit v b: b & ~(1<