Variabeln theByte är ju åttabitars. Det består ju av åtta bitar. Inget annat.
Det kan innehålla t.ex. 11110000 eller 00000111, men för bekvämlighets skull kan vi skriva decimalt eller hexadecimalt i programkoden och det översätts då till ettor och nollor i maskinkoden.
00000111
binärt = 4+2+1 = 7
decimalt
11110000
binärt = 128+64+32+16 = 240
decimalt
När du ser en formel t.ex. i denna if-sats:
if (apa & (bongo >> 3)) { ... } så måste du veta vad varje operation gör ochi vilken ordning de utförs för att förstå vad som händer.
(Som tur är kan man använda parenteser - då löser sig det med ordningen. Den innersta parentesen löses alltid först.)
Om apa = 00000111 och bongo = 11110000 så händer följande:
1) bongo shiftas tre steg åt höger: 11110000 blir 00011110.
2) logiska operationen OCH utförs på 00000111 och 00011110. Bara när båda bitarna på samma position är en etta så blir resultatet en etta:
Kod: Markera allt
00000111 (7) (det decimala talet står inom parentes)
& 00011110 (30)
---------
00000110 (6)
När det står
(1 << i) så är det talet "ett" decimalt dvs. 00000001 binärt, som skiftas
i antal gånger:
om i = 2 blir det 00000100, om i = 6 blir det 01000000.
Jämför med hur det skulle bli om du hade skrivit t.ex.
( 128 >> i ) istället?
Om du kan det här bra så kan du gå tillbaks i koden och se vad som sker och varför de tidigare försöken blev fel.
Lär du dig det binära logik-tänket så vinner du extremt mycket när du ska programmera controllers!