Mam 8bitovy unsigned integer, do ktereho ukladam dve ruzne informace
Leva polovina (v hexa zapisu je to levy znak) - informace typu ano/ne, koduji ano jako F a ne jako 0.
Prava polovina - ciselna informace (vetsinou v rozsahu 0-8, neni to ale striktne dane).
Celkova hodnota pro hodnotu ano/4 tedy vypada v hexa zapisu (decimalni je docela dost irelevantni) jako 0xF4. Ne/8 je pak 0x08.
O co mi jde: od prave poloviny potrebuju co nejrychleji odecitat / pricitat cislo 1 - a to pokud mozno aniz bych musel explicitne zjistovat hodnotu promenne. Problem uz je asi zrejmy: staci k 0x08 parkrat pricist jedna a hned je z toho 0xF0, coz je nezadouci, protoze prava polovina nesmi na levou mit vliv, jedna se o dve oddelene informace. To same se stane, kdyz od F0 (tedy ano/0) odectu jedna.
Dotaz tedy zni: Jak nejrychleji bezpecne zvetsit/zmensit hodnotu prave poloviny o jedna?
Jedna se mi opravdu o rychlost - tato uloha se typicky ma provadet treba 4 000 000 krat za sekundu. To, abych si to osetril podminkami je tedy neprijatelne, to uz bych mel rychlejsi to rozdelit do dvou promennych.
Jesli nekdo prijdete s lepsim zpusobem, jak tyto dve informace ukladat do jedne promenne, tak sem s nim, v kodu se mi to vyskytuje na par mistech a neni problem to zmenit. Upozornuji, ze ale cteni ma jeste podstatne vetsi prioritu nez zapis. Napadlo me treba ukladat ne hodnoty jako x*2 a ano hodnoty jako x*2+1, ale tam by znamenalo pri kazdem cteni delit dvema, coz je zbytecne pomale. Jde mi o jednoduche porovnavaci podminky typu
if(*cache < 0xF0 && *cache != 0x03) ...
...tj. jestli je leva strana ne a prava neni 3, tak proved kod.
Vecna slava a tucet panen v nebi uspesnemu resiteli :smile1: