Jak zamieniać liczby między systemem binarnym, dziesiętnym i szesnastkowym
System liczbowy określa, ile cyfr ma do dyspozycji i jaką wagę ma każda pozycja. W systemie dziesiętnym pozycje to kolejne potęgi dziesiątki, w dwójkowym potęgi dwójki, a w szesnastkowym potęgi szesnastki, gdzie cyfry od 10 do 15 zapisuje się literami od A do F. Zamiana na system dziesiętny sprowadza się więc do wymnożenia każdej cyfry przez wagę jej pozycji i zsumowania wyników.
W drugą stronę działa dzielenie z resztą. Dzielisz liczbę przez podstawę systemu docelowego, zapisujesz reszty i czytasz je od ostatniej do pierwszej. Dla systemu dwójkowego szybsza jest metoda wag: bierzesz kolejne potęgi dwójki od największej mieszczącej się w liczbie i sprawdzasz, którą z nich da się odjąć. Każde udane odjęcie to jedynka, każde nieudane to zero.
Między systemem dwójkowym a szesnastkowym nie trzeba przechodzić przez dziesiętny, bo szesnastka to dwójka do potęgi czwartej. Grupujesz bity po cztery od prawej strony i każdą czwórkę zamieniasz na jedną cyfrę szesnastkową. Do systemu ósemkowego grupujesz po trzy bity, bo osiem to dwójka do potęgi trzeciej. Ta zależność jest powodem, dla którego adresy i maski sieciowe czyta się binarnie, a kolory w CSS szesnastkowo.
Przykład: liczba 255 w czterech systemach
1
Dziesiętnie 255 to osiem jedynek binarnie: 128 plus 64 plus 32 plus 16 plus 8 plus 4 plus 2 plus 1, czyli 11111111.
2
Grupujesz bity po cztery od prawej: 1111 i 1111. Każda czwórka jedynek to szesnastkowo F, więc wynik to FF.
3
Grupowanie po trzy bity daje 011 111 111, czyli ósemkowo 377.
4
Sprawdzenie w drugą stronę: F to 15, więc FF to 15 razy 16 plus 15, czyli 255.
Najczęstsze pytania
Podziel bity na czwórki, licząc od prawej strony, i zamień każdą czwórkę na jedną cyfrę szesnastkową. Jeśli z lewej strony zabraknie bitów do pełnej czwórki, uzupełnij ją zerami. Przez system dziesiętny przechodzić nie trzeba.
Dokładnie 11111111, czyli osiem jedynek. To największa liczba, jaką da się zapisać na ośmiu bitach, i dlatego jest największą wartością oktetu w adresie IPv4.
System szesnastkowy potrzebuje szesnastu cyfr, a dostępnych jest tylko dziesięć znaków od 0 do 9. Brakujące sześć wartości, od 10 do 15, zapisuje się literami od A do F.
Dziel liczbę przez dwa i zapisuj reszty, a na końcu odczytaj je od dołu do góry. Alternatywnie odejmuj kolejne potęgi dwójki, zaczynając od największej, która się mieści: udane odjęcie zapisujesz jako jedynkę, nieudane jako zero.
Zapisz je w słupku jedna pod drugą i dodawaj od prawej strony. 0 + 1 daje 1, a 1 + 1 daje 0 i przeniesienie jedynki na następną pozycję. Trzy jedynki (razem z przeniesieniem) dają 1 i kolejne przeniesienie. Wynik warto sprawdzić, zamieniając obie liczby i sumę na system dziesiętny.
W zapisie znak-moduł pierwszy bit oznacza wyłącznie znak, a pozostałe bity to wartość liczby, więc -5 na ośmiu bitach to 10000101. W kodzie U2 liczbę ujemną otrzymuje się przez odwrócenie wszystkich bitów liczby dodatniej i dodanie jedynki, więc -5 to 11111011. To dwa różne zapisy i ten sam ciąg bitów oznacza w każdym z nich inną liczbę.
Każdą z trzech składowych zamień osobno na dwie cyfry szesnastkowe i sklej je w kolejności czerwony, zielony, niebieski. Dla rgb(255, 128, 16) wychodzi FF, 80 i 10, czyli kolor #FF8010. W drugą stronę pierwszą cyfrę pary mnożysz przez 16 i dodajesz drugą.