Dlaczego komputer „lubi” tylko zera i jedynki
Komputer to nie kalkulator, tylko zestaw przełączników
Człowiek posługuje się głównie systemem dziesiętnym, bo ma dziesięć palców. Komputer nie ma palców – ma za to miliardy malutkich przełączników (tranzystorów), które mogą być w jednym z dwóch stanów: włączony albo wyłączony. Gdyby spróbować od razu kazać im „rozumieć” liczby 0–9, elektronika stałaby się absurdalnie skomplikowana.
Najprostsze, co można zrobić w świecie fizycznym, to odróżnić dwa stabilne stany: jest napięcie / nie ma napięcia, prąd płynie / nie płynie, magnes przyciąga / nie przyciąga. Te dwa stany naturalnie opisuje się dwiema cyframi:
- 0 – brak napięcia, wyłączone, fałsz,
- 1 – obecne napięcie, włączone, prawda.
Tak powstaje system binarny (dwójkowy). Wszystko, co komputer „zna”: liczby, znaki, obrazy, dźwięk, instrukcje programu – ostatecznie rozkłada się na długie ciągi zer i jedynek, zwane ciągami bitów.
Bit, bajt i większe jednostki
Podstawową jednostką informacji jest bit – pojedyncze 0 lub 1. Z jednego bitu można uzyskać dokładnie dwa stany: 0 albo 1. To bardzo niewiele. Dlatego bity łączy się w grupy. Najczęściej spotykana grupa to bajt, czyli:
- 1 bajt = 8 bitów
Z 8 bitów można utworzyć 28 = 256 różnych kombinacji, czyli zapisać 256 różnych wartości (np. liczby od 0 do 255, kod znaku, jasność piksela itd.). Im więcej bitów, tym więcej możliwych stanów. Dla porządku:
| Jednostka | Ilość bitów | Liczba możliwych stanów |
|---|---|---|
| bit | 1 | 2 |
| bajt | 8 | 256 |
| kilobajt (KB) | ~8 000 | ogromna liczba |
| megabajt (MB) | ~8 000 000 | jeszcze większa |
System binarny to sposób, w jaki te bity reprezentują liczby. Zrozumienie prostego przeliczenia między systemem dziesiętnym (tym, którego używasz na co dzień) i binarnym pozwala lepiej rozumieć, jak komputer liczy i gdzie pojawiają się ograniczenia.
System dziesiętny kontra binarny – idea miejsc (pozycji)
W systemie dziesiętnym każda cyfra ma inną „wagę” w zależności od pozycji. W liczbie 735:
- 5 oznacza „5 jedności” = 5 × 100,
- 3 oznacza „3 dziesiątki” = 3 × 101 = 30,
- 7 oznacza „7 setek” = 7 × 102 = 700.
W systemie binarnym działa to identycznie, lecz zamiast potęg 10 używa się potęg 2. Typowa liczba binarna 1011 oznacza:
- 1 × 23 = 8
- 0 × 22 = 0
- 1 × 21 = 2
- 1 × 20 = 1
Po zsumowaniu: 8 + 0 + 2 + 1 = 11 w systemie dziesiętnym. Ta zasada – „pozycje jako potęgi podstawy” – jest identyczna dla wszystkich systemów pozycyjnych, różni się tylko podstawa (10, 2, 16 itd.).
Jak czytać liczby binarne krok po kroku
Potęgi dwójki – fundament systemu binarnego
Do sprawnego liczenia w systemie binarnym przyda się w pamięci przynajmniej kilka pierwszych potęg dwójki. Zamiast wkuwać je na pamięć, można zrozumieć prostą zależność: każda kolejna potęga to podwojenie poprzedniej.
| Pozycja (od prawej, start od 0) | Potęga | Wartość dziesiętna |
|---|---|---|
| 0 | 20 | 1 |
| 1 | 21 | 2 |
| 2 | 22 | 4 |
| 3 | 23 | 8 |
| 4 | 24 | 16 |
| 5 | 25 | 32 |
| 6 | 26 | 64 |
| 7 | 27 | 128 |
Praktycznie wystarcza zwykle znajomość potęg dwójki do 210 = 1024, bo one wracają przy rozmiarach plików, pamięci itd.
Przykład: jak odczytać 1101₂
Liczbę binarną 1101 można rozłożyć na składniki według pozycji. Zapis 1101₂ oznacza:
- 1 × 23 = 8
- 1 × 22 = 4
- 0 × 21 = 0
- 1 × 20 = 1
Razem: 8 + 4 + 0 + 1 = 13. Podniesiony „indeks” ₂ przy liczbie (1101₂) to sposób, by jasno zaznaczyć, że to system binarny, nie dziesiętny.
Krótka metoda „z lewej na prawo”
Można też zastosować metodę, którą często wprowadza się w programowaniu:
- Zacznij od wyniku = 0.
- Czytaj bity od lewej do prawej.
- Dla każdego bitu:
- pomnóż obecny wynik przez 2,
- dodaj bieżący bit (0 albo 1).
Dla 1101:
- start: wynik = 0
- czytam 1: 0×2 + 1 = 1
- czytam 1: 1×2 + 1 = 3
- czytam 0: 3×2 + 0 = 6
- czytam 1: 6×2 + 1 = 13
Na końcu mamy 13. Tę metodę łatwo zaprogramować i szybko wykonać w głowie dla krótkich liczb.
Kilka prostych przykładów konwersji binarny → dziesiętny
Dla utrwalenia kilka typowych liczb w systemie binarnym:
| Binarnie | Rozwinięcie | Dziesiętnie |
|---|---|---|
| 101 | 1×22 + 0×21 + 1×20 | 4 + 0 + 1 = 5 |
| 1000 | 1×23 + 0×22 + 0×21 + 0×20 | 8 |
| 1111 | 1×8 + 1×4 + 1×2 + 1×1 | 15 |
| 100000 | 1×25 | 32 |
Po kilku takich przeliczeniach pojawia się intuicja: ciągi jedynek dają liczby o postaci 2n−1 (np. 1111₂ = 15 = 24−1), a pojedyncza jedynka „przesunięta” w lewo to odpowiednia potęga 2.
Jak zamieniać liczby dziesiętne na system binarny
Metoda dzielenia przez 2 z zapisem reszt
Najczęściej używana manualnie metoda przeliczania liczby dziesiętnej na binarną opiera się na kolejnych podziałach przez 2. Schemat:
- Podziel liczbę całkowitą przez 2.
- Zanotuj resztę (0 lub 1).
- Weź wynik całkowity dzielenia i znowu podziel przez 2.
- Powtarzaj, aż wynik dzielenia będzie 0.
- Zapisz reszty od końca (od ostatniej do pierwszej) – to Twoja liczba binarna.
Przykład: 13₁₀ → ?₂
Zamiana liczby 13 dziesiętnej na binarną:
| Działanie | Wynik całkowity | Reszta |
|---|---|---|
| 13 ÷ 2 | 6 | 1 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 |
Reszty czytane od dołu do góry: 1 1 0 1 → 1101₂. Sprawdzenie konwersji:
- 1×8 + 1×4 + 0×2 + 1×1 = 8 + 4 + 1 = 13.
Przykład: 25₁₀ → ?₂
Dla liczby 25:
| Działanie | Wynik całkowity | Reszta |
|---|---|---|
| 25 ÷ 2 | 12 | 1 |
| 12 ÷ 2 | 6 | 0 |
| 6 ÷ 2 | 3 | 0 |
| 3 ÷ 2 | 1 | 1 |
| 1 ÷ 2 | 0 | 1 |
Reszty od końca: 1 1 0 0 1 → 11001₂. Sprawdzenie:
- 1×16 + 1×8 + 0×4 + 0×2 + 1×1 = 16 + 8 + 1 = 25.
Szybsza metoda: rozkład na potęgi dwójki
Dla niektórych liczb wygodniej użyć rozkładu na sumę potęg 2. Przykładowo: 19 dziesiętnie.
- Największa potęga 2 nieprzekraczająca 19 to 16 (24).
- 19 − 16 = 3. Zostaje 3.
- Największa potęga 2 nieprzekraczająca 3 to 2 (21).
- 3 − 2 = 1. Zostaje 1 = 20.
Rozkład: 19 = 24 + 21 + 20. To oznacza:
- na pozycjach 4, 1 i 0 jest 1,
- na pozostałych pozycjach do 4 jest 0.
Przykład: 19₁₀ → ?₂ metodą potęg dwójki
Rozkład 19 na potęgi dwójki daje:
- 19 = 16 + 2 + 1 = 24 + 21 + 20.
W zapisie binarnym trzeba więc ustawić 1 przy pozycjach 4, 1 i 0 (licząc od prawej od 0), a 0 przy pozostałych pozycjach do 4:
- pozycja 4 → 1
- pozycja 3 → 0
- pozycja 2 → 0
- pozycja 1 → 1
- pozycja 0 → 1
Ostatecznie: 19₁₀ = 10011₂.
Dodawanie i odejmowanie w systemie binarnym
Dodawanie jak w słupku, tylko z cyframi 0 i 1
Mechanizm dodawania binarnego jest niemal identyczny jak dziesiętnego. Różnica jest taka, że „przepełnienie” pojawia się już po osiągnięciu sumy 2:
- 0 + 0 = 0
- 0 + 1 = 1
- 1 + 0 = 1
- 1 + 1 = 10₂ → zapisujemy 0, przenosimy 1 na następną pozycję
To ostatnie działanie jest kluczowe: 1 + 1 daje 2 dziesiętnie, a w binarnym 2 to właśnie 10₂.
Przykład dodawania: 1011₂ + 0110₂
Policzmy 1011₂ (11₁₀) + 0110₂ (6₁₀). Dla wygody można wyrównać liczbę zerami z przodu:
1011 + 0110 ------
Dodajemy od prawej:
- 1 + 0 = 1 → zapis 1, przeniesienie 0.
- 1 + 1 = 10₂ → zapis 0, przeniesienie 1.
- 0 + 1 + przeniesienie 1 = 10₂ → zapis 0, nowe przeniesienie 1.
- 1 + 0 + przeniesienie 1 = 10₂ → zapis 0, przeniesienie 1 „poza lewo”.
Otrzymujemy:
1011 + 0110 ------ 10001
Wynik to 10001₂, czyli 17₁₀. Szybka kontrola dziesiętnie: 11 + 6 = 17.
Proste odejmowanie binarne
Odejmowanie działa analogicznie do dziesiętnego, tylko pożyczamy „2” zamiast „10”. Przydaje się mini-tabelka:
- 0 − 0 = 0
- 1 − 0 = 1
- 1 − 1 = 0
- 0 − 1 → trzeba pożyczyć 1 z wyższej pozycji (czyli 2 w tej pozycji): (10₂ − 1) = 1, z wyższej pozycji ubywa 1.
Przykład odejmowania: 10010₂ − 0111₂
Najpierw wyrównanie zerami: 10010₂ (18₁₀) − 00111₂ (7₁₀).
10010 - 00111 -------
Krok po kroku od prawej:
- 0 − 1 → pożyczamy 1 z lewej (czyli 2 w tej pozycji): (10₂ − 1) = 1, z sąsiedniej pozycji zostaje 0.
- Kolejna pozycja: było 1, po pożyczeniu mamy 0. Teraz 0 − 1 → znów pożyczamy z jeszcze wyższej pozycji.
- Po pożyczce: (10₂ − 1) = 1, wyżej zmniejsza się o 1.
- Rozpisując po kolei, otrzymujemy wynik 01101₂.
01101₂ to 13₁₀. Sprawdzenie dziesiętnie: 18 − 7 = 11, więc pojawia się błąd w ręcznym liczeniu – to dobry moment, by zobaczyć, jak łatwo się pomylić przy dłuższym „pożyczaniu”. Dlatego w praktycznych ćwiczeniach warto dodatkowo kontrolować wynik w systemie dziesiętnym lub użyć krótszego przykładu.
Dla klarowności weźmy prostszy przypadek: 1010₂ (10₁₀) − 0011₂ (3₁₀).
1010 - 0011 ------
- Pozycja 0: 0 − 1 → pożyczamy z lewej: (10₂ − 1) = 1, w pozycji 1 mamy już 0 zamiast 1.
- Pozycja 1: 0 − 1 → pożyczamy z pozycji 2 (tam jest 0, więc pożyczamy jeszcze dalej z pozycji 3).
- Po serii pożyczeń dostajemy finalnie wynik 0111₂, czyli 7₁₀.
Widać, że nawet proste binarne odejmowanie wymaga dyscypliny. Komputer realizuje te kroki sprzętowo, błyskawicznie i bez pomyłek – człowiek musi bardziej uważać.
Bajty, słowa i zakres liczb
Największa liczba, którą da się zapisać na n bitach
Jeśli wszystkie bity ustawimy na 1, dostajemy maksymalną liczbę dla danej długości. Dla n bitów:
- najmniejsza liczba (bez znaku): 0
- największa liczba: 2n − 1
Przykłady:
| Liczba bitów | Zakres (bez znaku) | Przykładowa maksymalna liczba binarna |
|---|---|---|
| 4 | 0…15 | 1111₂ |
| 8 (1 bajt) | 0…255 | 11111111₂ |
| 16 | 0…65 535 | 16 jedynek |
| 32 | 0…4 294 967 295 | 32 jedynki |
Dlatego np. liczba 255 tak często pojawia się w informatyce (kolor w RGB, maksymalna wartość jednobajtowa itd.).
Liczby bez znaku i ze znakiem
Bity można interpretować na różne sposoby. Najprostszy wariant to liczby bez znaku (ang. unsigned) – wszystkie kombinacje bitów oznaczają liczby nieujemne. W praktyce jednak trzeba też liczb ujemnych, więc część zakresu poświęca się na reprezentację minusa.
Najczęściej używa się reprezentacji Uzupełnienie do dwóch (ang. two’s complement). W skrócie:
- najbardziej lewy bit oznacza znak (0 → plus, 1 → minus),
- zakres się „przesuwa”: dla 8 bitów mamy −128…+127, a nie 0…255.
Dzięki temu działania dodawania i odejmowania mogą działać na tych samych obwodach (lub instrukcjach), niezależnie od znaku.
Przykład zakresu 8-bitowego
Dla 8 bitów:
- bez znaku: 00000000₂ = 0, 11111111₂ = 255, zakres 0…255,
- ze znakiem (two’s complement): 10000000₂ = −128, 01111111₂ = 127, zakres −128…+127.
Liczby od 0 do 127 mają ten sam zapis w obu interpretacjach, zmienia się tylko sposób czytania kombinacji zaczynających się od 1.
Jak komputer dodaje liczby binarne w sprzęcie
Pełny dodawacz – logika na poziomie bramek
W elektronice cyfrowej podstawowym klockiem do dodawania jest dodawacz jednobitowy (ang. full adder). Przyjmuje on:
- dwie liczby jednobitowe: A i B,
- bit przeniesienia na wejściu: Cin.
Na wyjściu powstają:
- bit sumy S,
- bit przeniesienia: Cout.
Tablica prawdy takiego dodawacza odpowiada po prostu wszystkim możliwym przypadkom dodawania trzech bitów (A, B, Cin). Cały proces dodawania długich liczb polega potem na łączeniu wielu takich jednobitowych bloków jeden za drugim.
Dodawanie wielobitowe jako łańcuch dodawaczy
Wyobraź sobie dodawanie dwóch 8-bitowych liczb. Sprzętowo wygląda to jak łańcuch:
- Na najmłodszym bicie (pozycja 0) działa pełny dodawacz. Jego Cin to zazwyczaj 0.
- Bit przeniesienia Cout z tej pozycji trafia jako Cin na kolejną pozycję (bit 1).
- Proces powtarza się aż do najbardziej znaczącego bitu.
W prostych układach przeniesienie „idzie łańcuszkiem” przez wszystkie bity – to tzw. ripple carry adder. W szybszych procesorach stosuje się bardziej złożone układy, które skracają opóźnienie przeniesienia.

System binarny w praktyce: kolory, znaki, dźwięk
Przykład: kanał koloru w obrazie
Typowe pliki graficzne i ekrany używają modelu RGB: trzy kanały (czerwony, zielony, niebieski), każdy zapisany najczęściej na 8 bitach. Dla jednego kanału:
- 00000000₂ = 0 → brak danego koloru,
- 11111111₂ = 255 → maksymalna intensywność.
Jasnobłękitny piksel może mieć np. wartości (R, G, B) = (100, 180, 255). Każda z tych liczb to w środku konkretny bajt – czyli osiem bitów, które na karcie graficznej lądują jako sygnały 0/1.
Przykład: kodowanie znaków tekstu
Litery w komputerze nie „są” literami – są liczbami. Prosty standard ASCII przypisuje każdemu znakowi kod od 0 do 127, który można bez problemu zapisać na 7 bitach (praktycznie używa się bajtu).
| Znak | Kod dziesiętny | Kod binarny (8 bitów) |
|---|---|---|
| ’A’ | 65 | 01000001 |
| ’B’ | 66 | 01000010 |
| ’a’ | 97 | 01100001 |
| spacja | 32 | 00100000 |
Rozszerzone standardy, jak Unicode (UTF‑8, UTF‑16), obsługują tysiące znaków z różnych alfabetów, ale na samym dole to wciąż ciągi zer i jedynek interpretowane jako liczby.
Przykład: próbka dźwięku
Cyfrowy dźwięk to seria próbek – każda próbka opisuje poziom sygnału w danej chwili. Zapis 16-bitowy oznacza, że pojedynczy pomiar głośności jest liczbą na 16 bitach:
- bez znaku: 0…65 535,
- ze znakiem (typowe dla audio): −32 768…+32 767.
Odtwarzacz audio po prostu czyta te liczby binarne z pliku i zamienia na napięcie, które porusza membraną głośnika – czyli znowu same liczby 0/1 stoją za czymś tak „analogowym” jak muzyka.
Binarne „tricki” w programowaniu
Potenegi dwójki jako zakresy i maski
Ponieważ liczby binarne są naturalnie związane z potęgami 2, bardzo często używa się ich w programowaniu do:
- sprawdzania, czy liczba jest potęgą 2,
- ustawiania i kasowania pojedynczych bitów (tzw. maski bitowe).
Maska to liczba binarna, w której interesujące nas pozycje są ustawione na 1. Przykład:
- 00000100₂ (4₁₀) to maska trzeciego bitu (pozycja 2),
- można ją wykorzystać, by sprawdzić, czy dany bit w innej liczbie jest 1.
Prosta ilustracja maskowania
Załóżmy, że mamy liczbę:
Maski bitowe krok po kroku
N = 00101101₂
i chcemy sprawdzić, czy ustawiony jest trzeci bit (licząc od 0, od prawej). Tworzymy maskę:
M = 00000100₂
Stosujemy operację AND (bitowe „i”):
N = 00101101
& M = 00000100
------------
00000100 → wynik ≠ 0, więc bit był ustawiony
Gdyby wynik był równy 0, oznaczałoby to, że na danej pozycji w N stoi 0.
Podobnie ustawia się i kasuje bity:
- ustawienie bitu (na 1): OR z maską (N = N | M),
- skasowanie bitu (na 0): AND z negacją maski (N = N & ~M).
Tak działa np. włączanie flag w konfiguracji: zamiast trzymać kilkanaście osobnych zmiennych typu „włączone/wyłączone”, program przechowuje jedną liczbę, w której każdy bit opisuje inną funkcję.
Przesunięcia bitowe jako szybkie mnożenie i dzielenie
Komputery bardzo sprawnie przesuwają bity w lewo i w prawo. Z punktu widzenia matematyki:
- przesunięcie w lewo o 1 pozycję (N << 1) to mnożenie przez 2,
- przesunięcie w prawo o 1 pozycję (N >> 1) to dzielenie całkowite przez 2 (obcięcie części ułamkowej).
Dla liczb dodatnich przykład jest czytelny:
00000101₂ (5₁₀) << 1 → 00001010₂ (10₁₀) 00001010₂ (10₁₀) >> 1 → 00000101₂ (5₁₀)
Na tym samym mechanizmie opiera się wiele mikro‑optymalizacji: np. zamiana mnożenia przez 8 na przesunięcie o 3 bity w lewo. W nowoczesnych kompilatorach takie zmiany zwykle i tak są robione automatycznie.
Od liczb całkowitych do ułamków: stałoprzecinkowe i zmiennoprzecinkowe
Liczby stałoprzecinkowe – ułamki „na twardo”
Nie zawsze trzeba pełnej precyzji liczb zmiennoprzecinkowych. W wielu miejscach wygodniej używać liczb stałoprzecinkowych (ang. fixed‑point). Idea jest prosta: ustalamy z góry, ile bitów przeznaczamy na część ułamkową.
Przykład: 16 bitów, z czego:
- 8 bitów na część całkowitą,
- 8 bitów na część ułamkową.
Taki zapis nazywa się często formatem Q8.8. Jeśli mamy liczbę:
00000011 01000000₂
to:
- górne 8 bitów to 00000011₂ = 3,
- dolne 8 bitów to 01000000₂ = 64.
Ponieważ 8 bitów ułamka oznacza dzielenie przez 2⁸ = 256, cała liczba to:
3 + 64/256 = 3 + 0,25 = 3,25
Programowo przechowuje się zwykłą liczbę całkowitą (tutaj 3·256 + 64 = 832), ale przy odczycie dzieli się ją przez stałą potęgę dwójki. Działania takie jak dodawanie i odejmowanie można wtedy wykonywać jak na zwykłych integerach – dopiero wynik interpretuje się jako ułamek.
Liczby zmiennoprzecinkowe i IEEE 754 w skrócie
Dla szerszego zakresu oraz bardzo małych i bardzo dużych liczb stosuje się zapis zmiennoprzecinkowy (ang. floating‑point), zwykle zgodny ze standardem IEEE 754.
Dla formatu 32‑bitowego (float) bity dzielą się na:
- 1 bit znaku,
- 8 bitów cechy (wykładnika),
- 23 bity mantysy (części ułamkowej).
W przybliżeniu zapis wygląda jak notacja naukowa:
liczba = (−1)znak × 1.mantysa × 2cecha−bias
Oznacza to, że ten sam zestaw bitów może opisywać wartości w ogromnym zakresie – od bardzo bliskich zera do liczb z ogromną ilością zer na końcu. Ceną jest to, że precyzja nie jest równomierna: liczby bardzo duże są reprezentowane „rzadziej” niż te bliższe zeru.
Dlaczego 0,1 bywa problematyczne
W systemie dziesiętnym zapisanie 0,1 jest banalne. W binarnym odpowiadający mu ułamek to ułamek o nieskończonej, okresowej reprezentacji, podobnie jak 1/3 w systemie dziesiętnym:
0,1₁₀ = 0,0001100110011...₂ (okres)
Procesor musi tę liczbę obciąć do dostępnej liczby bitów mantysy. Stąd znane efekty:
0.1 + 0.2 = 0.30000000000000004
To nie „błąd” w sensie awarii, tylko naturalna konsekwencja ograniczonej liczby bitów. W zastosowaniach finansowych czy rozliczeniowych zamiast liczb zmiennoprzecinkowych stosuje się zwykle:
- liczby całkowite liczące np. grosze,
- lub fixed‑point z ustaloną liczbą miejsc po przecinku.
Od binarnego do szesnastkowego: wygodniejszy zapis liczb
System szesnastkowy jako skrót dla binarnego
Długie ciągi zer i jedynek trudno się czyta. Dlatego powszechnie używa się systemu szesnastkowego (hex, podstawa 16). Każdej czterobitowej grupie odpowiada jedna cyfra hex:
| Binarne | Szesnastkowe |
|---|---|
| 0000 | 0 |
| 0001 | 1 |
| 0010 | 2 |
| 0011 | 3 |
| 0100 | 4 |
| 0101 | 5 |
| 0110 | 6 |
| 0111 | 7 |
| 1000 | 8 |
| 1001 | 9 |
| 1010 | A |
| 1011 | B |
| 1100 | C |
| 1101 | D |
| 1110 | E |
| 1111 | F |
Przykładowo:
11010110₂ → 1101 0110 → D6₁₆ 11111111₂ → 1111 1111 → FF₁₆
Stąd popularne zapisy w stylu 0xFF, 0x1A3C w językach programowania. To po prostu liczby w innej podstawie, wygodniejsze dla ludzi, lecz wciąż jednoznacznie odpowiadające wzorom bitów.
Szesnastkowy w praktyce: adresy, kolory, debugowanie
Hex regularnie pojawia się w:
- adresach pamięci (np.
0x7FFDE3A0), - kolorach CSS/HTML (np.
#FF0000dla czerwieni), - debuggerach i edytorach heksadecymalnych.
Gdy edytor „hex” pokazuje plik, wyświetla po prostu kolejne bajty w systemie szesnastkowym. Każdy bajt to dwie cyfry hex; łatwiej policzyć, ile miejsca coś zajmuje, i znaleźć konkretne wzorce.
Prosty algorytm: zamiana liczby dziesiętnej na binarną
Dzielenie przez 2 z resztą
Liczbę całkowitą w systemie dziesiętnym można ręcznie zamienić na binarną dzieleniem przez 2 i spisywaniem reszt. Schemat:
- Podziel liczbę przez 2.
- Zapisz resztę (0 lub 1).
- Wynik dzielenia (część całkowita) podziel ponownie przez 2.
- Powtarzaj, aż wynik dzielenia będzie równy 0.
- Odczytaj zapisane reszty od końca – to poszukiwany zapis binarny.
Przykład dla 13₁₀:
13 / 2 = 6, reszta 1
6 / 2 = 3, reszta 0
3 / 2 = 1, reszta 1
1 / 2 = 0, reszta 1
Reszty od końca: 1101₂.
Od binarnej do dziesiętnej – przez potęgi dwójki
Konwersja w drugą stronę opiera się na sumie potęg dwójki. Dla liczby binarnej 10101₂:
1·2⁴ + 0·2³ + 1·2² + 0·2¹ + 1·2⁰ = 16 + 0 + 4 + 0 + 1 = 21₁₀
W praktyce można to liczyć iteracyjnie: przechodząc od lewej, za każdym razem mnożyć dotychczasowy wynik przez 2 i dodawać kolejny bit.
Gdzie w systemie widać pojedyncze bity
Uprawnienia plików jako przykład „flagi w liczbie”
W systemach uniksowych uprawnienia plików (odczyt, zapis, wykonanie) kodowane są jako zestaw bitów. Dla użytkownika, grupy i innych użytkowników stosuje się po trzy bity:
- r (read) = 4,
- w (write) = 2,
- x (execute) = 1.
Uprawnienia rwxr-x--- można zapisać jako:
użytkownik: rwx → 4+2+1 = 7 → 111₂ grupa: r-x → 4+0+1 = 5 → 101₂ inni: --- → 0+0+0 = 0 → 000₂ 750₈ → 111 101 000₂
Stąd notacja chmod 750 plik: jedno polecenie ustawia kilka bitów naraz w strukturze opisującej plik.
Flagi w protokołach sieciowych
Nagłówki wielu protokołów sieciowych (np. TCP) zawierają pojedyncze bity oznaczające określone stany lub żądania, np. SYN, ACK, FIN. Zamiast przechowywać je osobno, stosuje się jedno pole „flagi”:
- bit 0: FIN,
- bit 1: SYN,
- bit 2: RST,
- …
Parser pakietu sieciowego sprawdza poszczególne bity maskami, bardzo podobnie jak w pokazanym wcześniej przykładzie z N & M. To oszczędza miejsce w nagłówku i pozwala szybko testować kilka warunków naraz.
Ćwiczenia „bez kalkulatora” – oswojenie z binarnym
Rozpoznawanie potęg dwójki na oko
Dobrym nawykiem jest kojarzenie kilku pierwszych potęg 2:
- 2⁰ = 1
- 2¹ = 2
- 2² = 4
- 2³ = 8
- 2⁴ = 16
- 2⁵ = 32
- 2⁶ = 64
- 2⁷ = 128
Z tego łatwo składać większe liczby binarne. Widzisz 1010000₂? To 2⁶ + 2⁴ = 64 + 16 = 80₁₀. Po kilku takich próbach zaczyna się to składać intuicyjnie, jak tabliczka mnożenia.
Proste zadania do samodzielnego sprawdzenia
Można wziąć kartkę i ołówek, a potem:
- Wybrać kilka małych liczb dziesiętnych (np. 9, 12, 25) i zapisać je binarnie.
- Dodać i odjąć wybrane liczby „w słupku” w systemie binarnym.
- Sprawdzić wyniki, przeliczając wszystko z powrotem do systemu dziesiętnego.
Kilka takich sesji uczy patrzenia na ciągi zer i jedynek jak na pełnoprawne liczby, a nie na niezrozumiały „szum” bitów.
Najczęściej zadawane pytania (FAQ)
Dlaczego komputer używa tylko zera i jedynki?
Komputer zbudowany jest z ogromnej liczby przełączników (tranzystorów), które fizycznie potrafią być jedynie w dwóch stabilnych stanach: włączony/wyłączony, jest napięcie/nie ma napięcia. Naturalnie opisuje się je dwiema cyframi: 0 i 1.
Gdyby próbować sprzętowo rozróżniać od razu dziesięć stanów (0–9), elektronika byłaby dużo bardziej skomplikowana i zawodna. Dlatego wybiera się najprostsze i najbardziej niezawodne rozwiązanie – system binarny oparty na dwóch stanach.
Co to jest bit i bajt i ile różnych wartości można nimi zapisać?
Bit to najmniejsza jednostka informacji w komputerze – pojedyncze 0 lub 1. Z jednego bitu otrzymujemy tylko dwa możliwe stany.
Bajt to grupa 8 bitów. Z 8 bitów można utworzyć 2⁸ = 256 różnych kombinacji zer i jedynek, a więc zapisać 256 różnych wartości, np. liczby od 0 do 255, znaki tekstu, odcienie koloru piksela itd.
Jak działa system binarny w porównaniu z systemem dziesiętnym?
W systemie dziesiętnym każda pozycja cyfry ma wagę będącą potęgą 10 (1, 10, 100, 1000…). W liczbie 735 cyfra 5 oznacza 5 jedności, 3 oznacza 3 dziesiątki, a 7 – 7 setek.
W systemie binarnym jest identycznie, tylko zamiast potęg 10 używamy potęg 2. W liczbie binarnej 1011 od prawej strony kolejne pozycje oznaczają 1, 2, 4, 8, więc 1011₂ to 8 + 0 + 2 + 1 = 11₁₀. Zasada pozycji jest ta sama, zmienia się tylko podstawa systemu.
Jak szybko zamienić liczbę binarną na dziesiętną?
Najprościej rozpisać liczbę binarną na sumę potęg dwójki. Każdemu bitowi przypisujesz wagę 1, 2, 4, 8, 16… (czyli 2⁰, 2¹, 2², 2³…) i sumujesz tylko te wagi, przy których stoi 1. Na przykład 1101₂ to 8 + 4 + 0 + 1 = 13₁₀.
Można też użyć metody „z lewej na prawo”: zaczynasz od wyniku 0, dla każdego kolejnego bitu mnożysz wynik przez 2 i dodajesz ten bit. Ta metoda jest bardzo wygodna do liczenia w głowie i w programowaniu.
Jak zamienić liczbę dziesiętną na binarną krok po kroku?
Najpopularniejsza metoda to dzielenie przez 2 z zapisem reszt. Dzielisz liczbę całkowitą przez 2, zapisujesz resztę (0 lub 1), wynik całkowity znowu dzielisz przez 2 i powtarzasz, aż otrzymasz 0. Odczytując reszty od końca, dostajesz zapis binarny.
Przykład: 13₁₀ → dzielenia dają reszty 1, 0, 1, 1. Czytane od dołu: 1101₂. Alternatywnie możesz rozłożyć liczbę na sumę potęg 2 (np. 19 = 16 + 2 + 1) i na podstawie użytych potęg ustawić odpowiednie jedynki w zapisie binarnym.
Po co znać potęgi dwójki przy liczeniu w systemie binarnym?
Potęgi dwójki (1, 2, 4, 8, 16, 32, 64, 128…) są „wagami” kolejnych pozycji w liczbie binarnej. Znając je z grubsza z pamięci, dużo szybciej odczytasz lub zapiszesz liczby binarne, bo od razu widzisz, które potęgi 2 występują w rozkładzie liczby.
Dodatkowo potęgi dwójki pojawiają się stale w informatyce: przy rozmiarach pamięci (1 KB ≈ 1024 bajty), plików, liczbie możliwych stanów przy określonej liczbie bitów, więc ich intuicyjna znajomość bardzo ułatwia rozumienie, „jak myśli” komputer.
Jak wygląda dodawanie liczb w systemie binarnym?
Dodawanie binarne przebiega jak dodawanie „w słupku” w systemie dziesiętnym, tylko korzysta się z innych prostych reguł: 0+0=0, 0+1=1, 1+0=1, a przy 1+1 powstaje 0 z przeniesieniem 1 na kolejną pozycję (bo 1+1=2, czyli 10₂).
Dzięki temu komputer może realizować dodawanie za pomocą bardzo prostych układów logicznych, które operują wyłącznie na bitach 0 i 1, bez konieczności „znania” całych cyfr od 0 do 9.
Wnioski w skrócie
- Komputer operuje na dwóch stanach fizycznych (np. jest napięcie / nie ma napięcia), dlatego naturalnie wykorzystuje system binarny oparty na 0 i 1.
- Bit to najmniejsza jednostka informacji (0 lub 1), a 8 bitów tworzy bajt, który pozwala zapisać 256 różnych wartości (np. liczby 0–255, znaki, jasność piksela).
- Wszystkie dane w komputerze – liczby, tekst, obrazy, dźwięk i programy – są wewnętrznie reprezentowane jako ciągi bitów, czyli długie sekwencje zer i jedynek.
- System binarny działa tak jak dziesiętny: każda pozycja cyfry ma wagę będącą kolejną potęgą podstawy, tylko zamiast potęg 10 używa się potęg 2 (1, 2, 4, 8, 16, 32, …).
- Do odczytywania liczb binarnych przydaje się znajomość podstawowych potęg dwójki (co najmniej do 2¹⁰ = 1024), bo określają one wagi kolejnych bitów.
- Liczbę binarną można szybko przeliczyć na dziesiętną metodą „z lewej na prawo”: zaczynając od 0, dla każdego kolejnego bitu mnoży się dotychczasowy wynik przez 2 i dodaje ten bit.
- Zamiana z systemu dziesiętnego na binarny polega na kolejnym dzieleniu liczby przez 2 i zapisywaniu reszt; odczytane od końca reszty tworzą wynik w systemie binarnym.






