#1 Hufnagel
v původním kódu je pár nepřesností podmínky by měla být trošku jinak, aby to odpovídalo zadání
x++;
if(x>15) X=0;
if(x==0 || x==4... x==12) { ... }
případně lépe řešit přes modulo 4
if (x%4 ==0)
já bych to řešil rotací a vymaskováním použitelné pro různé kombo výběru pozic
unsigned short x = 0b0000000000000001;
unsigned short mask = 0b0001000100010001;
x <<=1;
if(x==0) =1; /při přetečení nastaví začátek
šlo by použít i 1-řádkově - zde výhodou může být optimalizace v kompilátoru, že vygeneruje nativní instrulci ROL - rotace posun doleva s přenosem nejvyššího bitu do nejnižšího
x = (x << 1) | (x >> 15); /
no a nakonec podmínka pro dané pozice
if (x && mask)
EDIT:
Ještě bych se vyjádřil k printf
& má přednost před << tzn výsledek bude (tm & 1) << x což asi není úmyslem, správně, pokud se má vypsat stav bitu na pozici, by mělo být:
tm & (1 << x)
!! - dvojitá negace - v podstatě se vyruší, ale může mít vliv na normalizaci bitového výsledku ale v tom případě musí být vše správně uzávorkováno
!!(tm & (1 << x))
TIP: Přetáhni ikonu na hlavní panel pro připnutí webu


