Arduino Polska Forum

Pełna wersja: Czy mógłby mi ktoś wytłumaczyć co oznacza ten fragment kodu?
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Hej! Mam problem ze zrozumieniem tego konkretnego kawałka kodu:

Kod:
uint32_t rgb = (uint32_t) strtol((const char *) &payload[1], NULL, 16);

                analogWrite(LED_RED,    ((rgb >> 16) & 0xFF));
                analogWrite(LED_GREEN,  ((rgb >> 8) & 0xFF));
                analogWrite(LED_BLUE,   ((rgb >> 0) & 0xFF));


Dokładnie chodzi mi o całą pierwszą linijkę oraz argumenty typu:
Kod:
((rgb >> 16) & 0xFF));


Mógłby ktoś na szybko powiedzieć co to robi lub chociaż poratować jakimś linkiem? Gdyż nawet nie bardzo wiem pod jakim hasłem wyszukać informacji w tym temacie. 

Z góry dzięki za pomoc Smile
Poczytaj o przesunięciach bitowych, czyli szybkim mnożeniu i dzieleniu..

rgb >>16 przesuwa w prawo o 16 bitów czyli dzieli RGB/ 2^4 dany wynik jest porównywany "&" 0xFF (czyli z 255) operacje bitowe

0xFF w formie binarnej to 0000000011111111 kiedy rgb podzielone da nam wynik np,100 to w formie binarnej 0000000001100100 i to porównanie da nam wynik

0000000011111111
0000000001100100
0000000001100100 wynik 100

Te "& 0xFF" jest tylko po to żeby zawsze podzielona liczba dała nam max 255...

Bo jeśli jakimś cudem podzielone RGB da nam więcej niż 255 dajmy na to 300 wiec w postaci binarnej 0000000100101100

0000000011111111
0000000100101100
0000000000101100 to porównanie skróci nam do 44