System binarny od podstaw - bity, bajty i konwersja

Grafika wyjaśnia konwersję jednostek pamięci komputerowej, opartą na systemie binarnym. Pokazuje zamianę małych wielkości na duże i odwrotnie, z podziałem lub mnożeniem przez 1024.

Napisano przez

Alex Jabłoński

Opublikowano

16 wrz 2026

Spis treści

Gdy zaczynasz programować, szybko trafiasz na system binarny - zapis, w którym występują wyłącznie cyfry 0 i 1. Na pierwszy rzut oka ciąg taki jak 101101 może wyglądać przypadkowo, ale każda jego pozycja ma konkretną wartość. Pokażę, jak czytać takie liczby, zamieniać je na zapis dziesiętny, wykorzystywać w kodzie oraz rozumieć rolę bitów i bajtów.

Dwa znaki wystarczą do zapisu liczb i informacji

  • Podstawa 2 oznacza, że zapis korzysta tylko z cyfr 0 i 1.
  • Każda pozycja ma wagę będącą kolejną potęgą liczby 2.
  • Liczbę binarną na dziesiętną można zamienić przez sumowanie wartości pozycji.
  • Zapis dziesiętny na binarny najłatwiej uzyskać przez dzielenie przez 2 i zapisywanie reszt.
  • 8 bitów tworzy bajt, który może przechowywać 256 różnych wartości bez znaku.
  • W JavaScript i Pythonie konwersję wykonują gotowe funkcje, ale rozumienie mechanizmu pomaga unikać błędów.

Na czym polega zapis oparty na dwóch cyfrach

W systemie dziesiętnym każda pozycja ma wagę będącą potęgą liczby 10. W liczbie 583 cyfra 5 oznacza pięć setek, 8 osiem dziesiątek, a 3 trzy jedności. W zapisie binarnym działa dokładnie ta sama zasada, tylko podstawą jest liczba 2.

Od prawej strony kolejne pozycje mają więc wartości 1, 2, 4, 8, 16, 32 i tak dalej. Cyfra 1 oznacza, że daną wartość dodajemy, a 0, że ją pomijamy. Przykład 10110₂ można rozpisać tak:

Pozycja 16 8 4 2 1
Cyfra 1 0 1 1 0

Wynik to 16 + 0 + 4 + 2 + 0, czyli 22 w systemie dziesiętnym. Indeks dolny 2 jest pomocny w podręcznikach i zadaniach, bo jasno pokazuje podstawę. W kodzie częściej spotkasz prefiks, na przykład 0b10110.

To, co początkujących zwykle myli, to długość zapisu. Liczba 00101 ma tę samą wartość co 101, ponieważ zera z lewej strony nie zwiększają wartości. Mogą jednak mieć znaczenie przy pracy z ustaloną liczbą bitów, na przykład przy adresach, maskach i danych zapisanych zawsze w 8-bitowych blokach.

Jak zamienić zapis binarny na dziesiętny

Najprostsza metoda polega na przypisaniu każdej cyfrze odpowiedniej potęgi dwójki, a potem dodaniu tylko tych wartości, przy których stoi 1. Nie trzeba zapamiętywać skomplikowanego wzoru. Wystarczy znać ciąg 1, 2, 4, 8, 16, 32, 64, 128.

Przykład dla liczby 110101

Rozpiszmy cyfry od prawej strony:

Potęga 2⁵ 2⁴ 2⁰
Wartość 32 16 8 4 2 1
Cyfra 1 1 0 1 0 1

Dodajemy wartości stojące pod jedynkami: 32 + 16 + 4 + 1. Otrzymujemy 53. Taki sposób jest dobry na początku nauki, bo pokazuje, skąd bierze się wynik, zamiast sprowadzać konwersję do bezmyślnego użycia kalkulatora.

Konwersja w drugą stronę

Aby zamienić liczbę dziesiętną na zapis binarny, dzielimy ją przez 2 i zapisujemy resztę z każdego dzielenia. Wynik odczytujemy od dołu do góry.

Działanie Iloraz Reszta
13 ÷ 2 6 1
6 ÷ 2 3 0
3 ÷ 2 1 1
1 ÷ 2 0 1

Reszty czytane od ostatniej do pierwszej dają 1101₂. Najczęstszy błąd polega właśnie na zapisaniu ich w kolejności wykonywania obliczeń, co dałoby błędne 1011. W praktyce zawsze można sprawdzić wynik, zamieniając otrzymany zapis z powrotem na dziesiętny.

Jak wykonywać działania na liczbach binarnych

Dodawanie działa podobnie jak w systemie dziesiętnym, ale mamy tylko dwie cyfry. Najważniejsze reguły są krótkie:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 0 = 1
  • 1 + 1 = 10, czyli zapisujemy 0 i przenosimy 1 do następnej pozycji

Przykład 1011 + 0110 daje 10001. Po zamianie na wartości dziesiętne otrzymujemy 11 + 6 = 17, więc wynik można łatwo zweryfikować inną metodą.

W programowaniu ważne są również operacje bitowe. Operator AND zwraca 1 tylko wtedy, gdy oba bity mają wartość 1, OR zwraca 1, gdy przynajmniej jeden bit ma wartość 1, a XOR zwraca 1, gdy bity są różne.

Operacja Przykład Wynik Zastosowanie
AND 1100 & 1010 1000 Sprawdzanie wybranych bitów
OR 1100 | 1010 1110 Ustawianie bitów
XOR 1100 ^ 1010 0110 Porównywanie różnic

Na tym etapie nie trzeba jeszcze używać operacji bitowych w każdym projekcie. Są jednak przydatne przy flagach, uprawnieniach, kompresji, grafice i pracy z protokołami. Sam traktuję je jako narzędzie specjalistyczne, a nie obowiązkowy zamiennik zwykłych operatorów matematycznych.

Bity, bajty i dane przechowywane przez komputer

Bit to najmniejsza jednostka informacji i może przyjąć wartość 0 albo 1. Osiem bitów tworzy bajt, a więc blok pozwalający zapisać 256 różnych kombinacji, od 00000000 do 11111111. W zapisie bez znaku daje to zakres od 0 do 255.

Rozmiar danych często opisuje się właśnie przez bajty, kilobajty, megabajty i gigabajty. W programowaniu warto rozróżniać zapis dziesiętny stosowany do wygodnego odczytu od binarnej reprezentacji, która pokazuje, jak informacja jest organizowana na niskim poziomie.

Liczby, tekst i kolory

Komputer przechowuje nie tylko liczby. Litera, obraz, dźwięk i instrukcja programu są ostatecznie reprezentowane jako dane, które można opisać ciągami bitów. Litera A ma w ASCII wartość 65, czyli 1000001₂, ale współczesne teksty często korzystają z Unicode i kodowania UTF-8, gdzie jeden znak może zajmować od 1 do 4 bajtów.

Dobrym przykładem ze świata webu jest kolor zapisany jako #FF0000. To forma szesnastkowa, wygodniejsza od długiego ciągu zer i jedynek. Poszczególne pary znaków opisują natężenie czerwieni, zieleni i niebieskiego, a każda z tych wartości mieści się w zakresie 0-255.

Warto też pamiętać o liczbach ujemnych. Komputery często przechowują je w kodzie uzupełnień do dwóch, czyli reprezentacji, w której najbardziej znaczący bit wpływa na znak. Dla 8 bitów typowy zakres wynosi od -128 do 127, a nie od 0 do 255. To drobny szczegół, który potrafi wyjaśnić zaskakujący wynik operacji bitowej.

Jak korzystać z zapisu binarnego w kodzie

W językach programowania nie musisz ręcznie przeliczać każdej wartości. JavaScript pozwala zapisać literał binarny z prefiksem 0b, a funkcja parseInt przyjmuje podstawę liczby jako drugi argument.

const liczba = 0b1011;

console.log(liczba);                 // 11
console.log(parseInt("1011", 2));    // 11
console.log(11 .toString(2));        // "1011"

W tym przykładzie 1011 jako tekst jest czymś innym niż liczba zapisana w kodzie jako 0b1011. To rozróżnienie ma praktyczne znaczenie. Tekst zachowuje na przykład zera początkowe, dlatego przy pracy z kodami, maskami lub danymi o stałej długości warto najpierw ustalić, czy potrzebujesz wartości liczbowej, czy ciągu znaków.

Przeczytaj również: Full stack - co to jest i jak zacząć? Praktyczny przewodnik

Ręczna konwersja jako ćwiczenie programistyczne

Jeżeli chcesz przećwiczyć pętle i operatory, możesz napisać własną funkcję zamieniającą liczbę dziesiętną na binarną:

function naBinarny(liczba) {
  if (liczba === 0) return "0";

  let wynik = "";

  while (liczba > 0) {
    wynik = (liczba % 2) + wynik;
    liczba = Math.floor(liczba / 2);
  }

  return wynik;
}

console.log(naBinarny(13)); // "1101"

Funkcja wykorzystuje resztę z dzielenia przez 2 i dokleja ją z lewej strony wyniku. W prawdziwej aplikacji skorzystałbym z gotowej metody, ale ćwiczenie dobrze pokazuje działanie pętli, dzielenia całkowitego i operatora modulo. Warto dodać obsługę liczb ujemnych i sprawdzenie poprawności danych, jeśli funkcja ma trafić do większego projektu.

Typowe błędy początkujących

Pierwszy błąd to traktowanie zapisu 1010 jak liczby dziesiętnej. Bez informacji o podstawie nie zawsze wiadomo, jak interpretować zapis, dlatego w zadaniach używa się oznaczeń takich jak 1010₂ albo 0b1010.

Drugi problem to pomijanie zer początkowych tam, gdzie mają znaczenie. Wartości 5 i 00000101 są matematycznie równe, ale pierwsza reprezentuje zwykłą liczbę, a druga może być ośmiobitową maską. W protokołach i strukturach danych długość zapisu bywa równie istotna jak jego wartość.

Trzeci błąd wiąże się z mieszaniem bitów i bajtów. 1 bajt to 8 bitów, ale 1 kilobajt może oznaczać 1000 bajtów w zapisie dziesiętnym albo 1024 bajty w tradycyjnym ujęciu informatycznym. Przy rozmiarach plików najlepiej sprawdzić, jaką konwencję przyjmuje konkretne narzędzie.

Nie polecam też uczenia się samych tabel bez rozumienia pozycji. Jeśli zapamiętasz, że każda kolejna pozycja jest dwa razy większa od poprzedniej, odtworzysz potrzebne wartości nawet po dłuższej przerwie. To daje znacznie większą swobodę podczas debugowania i pracy z dokumentacją.

Od pierwszych bitów do świadomego programowania

Najważniejsza umiejętność nie polega na szybkim przepisywaniu ciągów 0 i 1. Chodzi o rozpoznanie, co reprezentuje dany zapis, ile zajmuje miejsca i jak program interpretuje jego wartość.

Na początek przećwicz zamianę kilku liczb, na przykład 5, 10, 15, 32 i 64, a potem sprawdź te same wyniki w JavaScript. Gdy swobodnie odczytasz pozycje, dodasz liczby binarne i rozróżnisz bit od bajtu, operacje bitowe przestaną wyglądać jak tajemniczy detal z wnętrza komputera.

W codziennym programowaniu najczęściej będziesz korzystać z zapisu dziesiętnego lub szesnastkowego, bo są wygodniejsze dla człowieka. Znajomość podstaw dwójkowej reprezentacji nadal robi różnicę, szczególnie przy debugowaniu danych, kolorach, kodowaniu znaków, pamięci i komunikacji między systemami.

FAQ - Najczęstsze pytania

Przypisz kolejnym pozycjom od prawej strony potęgi dwójki: 1, 2, 4, 8, 16 i tak dalej. Dodaj tylko te wartości, przy których znajduje się cyfra 1. Na przykład 110101₂ oznacza 32 + 16 + 4 + 1, czyli 53.

Dziel liczbę przez 2, zapisując resztę z każdego dzielenia, aż iloraz wyniesie 0. Otrzymane reszty odczytaj od dołu do góry. Dla liczby 13 daje to 1101₂.

Bit przyjmuje wartość 0 albo 1, a 8 bitów tworzy bajt. Jeden bajt pozwala zapisać 256 kombinacji, od 00000000 do 11111111. Dla wartości bez znaku oznacza to zakres od 0 do 255, natomiast w kodzie uzupełnień do dwóch typowy zakres wynosi od -128 do 127.

Literał binarny zapisuje się z prefiksem 0b, na przykład 0b1011 ma wartość 11. Do konwersji tekstu można użyć parseInt z podstawą 2, a metodą toString(2) zamienić liczbę na zapis binarny. Tekst i liczba różnią się między innymi tym, że tekst zachowuje zera początkowe.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi:

system binarny bity bajty javascript operacje bitowe

Udostępnij artykuł

Alex Jabłoński

Alex Jabłoński

Nazywam się Alex Jabłoński i od 14 lat zajmuję się programowaniem webowym. Moja przygoda z tą dziedziną zaczęła się od prostych projektów, które stopniowo przerodziły się w pasję do tworzenia złożonych aplikacji internetowych. Interesuje mnie nie tylko kodowanie, ale także dzielenie się wiedzą, co skłoniło mnie do pisania artykułów, które pomagają innym zrozumieć zasady programowania. W swoich tekstach koncentruję się na podstawach, ale także na bardziej zaawansowanych zagadnieniach, starając się w przystępny sposób wyjaśnić trudne tematy. Przy pisaniu zwracam szczególną uwagę na aktualność informacji oraz ich zrozumiałość. Regularnie śledzę nowinki w branży, porównuję różne podejścia i staram się uprościć skomplikowane koncepcje, aby były dostępne dla każdego, niezależnie od poziomu zaawansowania. Moim celem jest dostarczenie wartościowych treści, które pomogą czytelnikom w ich drodze do kariery w programowaniu webowym.

Napisz komentarz