takze jestli to spravne chapu, tak kdyz napisu = a pak nastavim bity, ktery chci, tak se premaze jakykoliv puvodni nastaveni registru?
a pokud pouziju pouze logicky soucet tak upravim pouze konkretni bit? Chapu to spravne? Dik moc za pomoc
ano
a ak chces iba niektore bity nulovat a ostatne “nechytat”, tak pouzijes napriklad zapis
XYZ &=~((1<<BIT_A)|(1<<BIT_B));
co je skrateny zapis (C-ckosa len tak hemzi skratenymi zapismi, ved komu by sa chcelo tolko tukat do klavesnice ) to iste ako
XYZ =XYZ & ~((1<<BIT_A)|(1<<BIT_B));
ako aj pri tom OR-e
XYZ |=(1<<BIT_A)|(1<<BIT_B);
je to iste ako
XYZ = XYZ | ((1<<BIT_A)|(1<<BIT_B));
Vonkajsie zatvorky su v poslednom riadoku zbytocne, ale pomaha to udrzovat prehlad v zdrojovom kode, hlavne ak chces aby Ti to posudzoval i niekto iny a ten si bol na cistom co a ako je myslene. Nie kazdy musi mat zazrate priority operatorov pod kozou
OK to chapu dik,
a muzu bity nulovat prikazem napr. ABC &= (0<< BIT_A);
je toto mozne? ja jsem kapitolu bitovych operaci pri uceni preskocil s tim ze to nikdy nebudu potrebovat a ted kdyz me zacali zajimat uC tak zjistuju ze to je potreba
Ne nejde to. JE to blbost.
&= použít můžeš, ale přeber si jak funguje AND.
Tedy když chceš nulovat třeba PC6, musíš takto:
PORTC &= 0b10111111
nebo
PORTC &= ~(1<<PC6)
Ale tohle ti tu myslím už napsali.
Rozeberme tedy zápis “ABC &= (0<< BIT_A);”
a<<b je binární posuv čísla a vlevo o b bitů. Ve tvém případě to tedy posune 0 o BIT_A doleva. Výsledkem závorky je tedy 0.
Nyní kombinovaný operátor přiřazení a logického součinu &=.
Vezme se výraz na levé straně, s ním se provede logický součin s výsledkem výrazu napravo a uloží se doleva.
Ve tvém případě se tedy vezme číslo v ABC, provede se součin s 0 (0 = výsledek výrazu vpravo) a uloží do ABC. V ABC ti tedy zůstane 0
jj mate pravdu uy jsem si to takz uvedomil vsem dik moc