00000010 i 00001000 = 10000010
Bo... | zupełnie tak nie działa.
Operator OR (|) kładzie obie liczby obok siebie i daje na wyjściu 1, jeśli na którymkolwiek odpowiadającym wejściu było 1. Czyli na przykład:
00000010 (2)
00001000 (8)
-------- OR
00001010 (10)
Wynik to 1010 czyli 10.
Ale między operacjami robisz jeszcze "& 0xF0", czyli w zasadzie zmieniasz liczbę z powrotem na 0. Czyli wychodzi:
0 & 0xF0 => 0
0 | 2 => 2
2 & 0xF0 => 0
0 | 8 => 8
wynik == 8
Nie wiem skąd doszedłeś do wniosku że wynikiem powinien być 10000010.