Witam!
Jestem nowy na forum także proszę o wyrozumiałość jeżeli w złym miejscu zamieszczam moje pytanie:)
Mam pewne niejasności jeśli chodzi o kod z rozdziału o multipleksowaniu LED z książki Pana Mirosława.
Dokładnie chodzi o to w jaki sposób odbywa się przemieszczanie zera w zmiennej "licznik". Najlepiej jak przedstawię moje pytanie na podstawie uproszczonego kodu z książki:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Pierwsze pytanie dotyczy instrukcji przesunięcia bitu w lewo.
Wcześniej w rozdziale instrukcja przesunięcia wyglądała następująco: (zmienna<<ilość_miejsc)
czyli w naszym przypadku (licznik<<1) , a tutaj jest instrukcja której do końca nie rozumiem czyli licznik <<= 1 , znak <<= oznacza przecież mniejszy/równy. Nie rozumiem w jaki sposób ta instrukcja dokonuje przesunięcia bitu w lewo.
Kolejne pytanie, być może wynikające z nie zrozumienia instrukcji <<=, dotyczy powyższego kodu.
Przeanalizuje linijka po linijce jak ja rozumiem powyższy kod co się dzieje w bajcie licznik:
1: 0000 0001 //zmienna licznik jest poza pętlą, licznik=1
2: 0000 0010 //zmienna jest w pętli while(1) - dokonuje się przesunięcie bitu w lewo
3: 0000 0010 // sprawdzany jest warunek if(licznik>8) licznik=1;
4: 1111 1101 // dokonywana jest negacja bitowa
5: 1111 1101 // czekamy 1 s.
//zmienna robi "drugie okrążenie" w pętli
1: 1111 1010 // dokonuje się przesunięcie bitu w lewo - tutaj właśnie nie rozumiem ponieważ miało krążyć zero w 4-ech najmłodszych bitach, a po przesunięciu od prawej bajt jest uzupełniany zerami więc pojawia się kolejne zero
2: 0000 0101 //dokonywana jest negacja - i tutaj całkowicie wszystko jest nie tak
// dalej nie ma sensu żebym pisał
Na pewno błędne jest moje rozumowanie bo program działa prawidłowo, także wszystko jest w porządku. Ale uważam, że samo to że układ działa to jest połowa sukcesu, drugą połową jest zrozumienie dlaczego działa:)
Bardzo bym prosił o wytłumaczenie mi gdzie jest błąd w moim rozumowaniu.
Pozdrawiam serdecznie