AVR C co to robi??

Feb 10, 2009 15 Replies

Nigdy nie programowalem w C ale musialem przerobic pewne funkcje w dostarczonym programie. Jest to na tyle proste ze w sumie sobie poradzilem ale nie moge zrozumiec dzialania jednego warunku. Poszczegolne skladowe wiem co robia ale caly warunek jest dla mnie niezrozumialy. Brzmi on: if (zmienna & (1<<3)) To jest caly warunek a potem sa polecenia wykonywane jesli jest lub nie jest spelniony. Ale kiedy on jest albo nie jest spelniony?? Mozecie podpowiedziec.



Jesli bit nr. 3 jest zapalony w zmienna to ...

"Grupki" <janusz snipped-for-privacy@o2.pl schrieb

Testuje 4. bit zmiennej (liczac od 0)

1<<3 to jest 8 a & to AND bitowy.

hej

Czyli 1<<3 oznacza argument dla funkcji AND?? Czy mozliwa jest opcja 0<<4 przy jakiejs innej funkcji i to by testowalo 4 bit??

U¿ytkownik "Grupki" <janusz snipped-for-privacy@o2.pl napisa³ w wiadomo¶ci news:gmspfv$k6m$ snipped-for-privacy@news.supermedia.pl...

Tak. To maska do iloczynu (&).

Dziesiêtne 1 (czyli np. 00000001bin) przesuniête o 3 bity w lewo (<<)

Zera nie ma sensu przesuwaæ:)

1<<4

Pozdrawiam, Szymon

Operator << to przesunięcie o daną liczbę bitów w lewo. W tym przypadku:

((000...00001)bin << 3) == (000...01000)bin == (8)dec

Operator & to operacja AND na poziomie bitów. Czyli przykładowo binarnie:

00001011 & 00000110

---------- 00000010

To samo w zapisie dziesiętnym:

11 & 6 = 2

To akurat nic nie zmieni... (0000000...0 << 4) == 0000...0000 :>

Pozdrawiam

Czarek

U¿ytkownik "Szymon" snipped-for-privacy@atczop.onet.pl> napisa³ w wiadomo¶ci news:gmsqcr$rnv$ snipped-for-privacy@news.onet.pl...

Czyli to to samo co: if (zmienna & 0b00000100) tylko inaczej zapisane ??

Z dokładnością że nie 0b00000100 a 0b00001000, to tak.

Pozdrawiam

Czarek

Oj chyba jednak 3.

00001000 76543210

również pozdr.

No to autor programu tez cos pomieszal bo w komentarzu pisze wlasnie o trzecim bicie dlatego tez mi sie nic nie zgadzalo.

Grupki pisze:

Bit zerowy, pierwszy, drugi, trzeci - wszystko sie zgadza :)

W C większośc rzeczy numerujemy od 0. Bity też.

Słusznie. Co nie zmienia faktu, że autora wątku też ta notacja - słuszna skądinąd - zmyliła. :)

Pozdrawiam

Czarek

mw158979 pisze:

jeśli licząc od zera to będzie trzeci. Pozdr. MD

Grupki pisze:

Tak. Ustawia 1 na najmłodzym bicie a potem przesuwa operatorem << o zadaną liczbę pozycji. Łatwiej widać który bit zapalasz niż gdy wpisujesz 0b00010000.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required