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.
AVR C co to robi??
Feb 10, 2009
15 Replies
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<<4Pozdrawiam, 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 ??
^^^
4Pozdrawiam
Czarek
Z dokładnością że nie 0b00000100 a 0b00001000, to tak.
Pozdrawiam
Czarek
Oj chyba jednak 3.
00001000 76543210ró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