Jak zamienić liczbę binarną na dziesiętną? Prosta metoda

Cyfrowy chaos zamienia się w porządek. Widać tu proces zamiany liczby binarnej na dziesiętną, gdzie zera i jedynki układają się w logiczne ciągi.

Autor

Alex Jabłoński

Opublikowano

25 paź 2026

Spis treści

Gdy widzisz zapis 101101, komputer odczytuje go inaczej niż człowiek przyzwyczajony do systemu dziesiętnego. Zamiana liczby binarnej na dziesiętną polega na przypisaniu kolejnym cyfrom odpowiednich potęg liczby 2, a potem zsumowaniu wyników. Pokażę prostą metodę ręczną, przykłady z częścią ułamkową, sposób programistyczny oraz błędy, przez które wynik często się nie zgadza.

Najważniejsze zasady pozwalają przeliczyć zapis binarny bez zgadywania

  • System binarny używa wyłącznie cyfr 0 i 1.
  • Prawa skrajna cyfra ma wagę 20 = 1, a każda kolejna po lewej dwukrotnie większą.
  • Liczbę całkowitą oblicza się przez mnożenie cyfr przez potęgi 2 i dodawanie wyników.
  • Algorytm Hornera pozwala wykonywać konwersję szybko i bez wypisywania potęg.
  • W programie trzeba sprawdzić, czy wejście zawiera wyłącznie 0 oraz 1.

Dlaczego zapis binarny ma inną wartość niż wygląda

W systemie dziesiętnym każda pozycja ma wagę będącą potęgą liczby 10. W zapisie 352 cyfra 3 oznacza 3 × 100, cyfra 5 oznacza 5 × 10, a cyfra 2 oznacza 2 × 1. System binarny działa identycznie, tylko jego podstawą jest liczba 2.

Dlatego zapis 11012 nie oznacza tysiąca stu jeden. Poszczególne pozycje mają wartości 8, 4, 2 i 1. Cyfry binarne wskazują, które z tych wartości należy dodać:

Cyfra Potęga 2 Waga pozycji Wynik mnożenia
1 23 8 1 × 8 = 8
1 22 4 1 × 4 = 4
0 21 2 0 × 2 = 0
1 20 1 1 × 1 = 1

Po dodaniu wartości otrzymujemy 8 + 4 + 0 + 1 = 13. To właśnie najważniejsza zasada całej konwersji. Zera nie zwiększają wyniku, ale zajmują pozycję i dlatego nie wolno ich pomijać przed wykonaniem obliczeń.

Jak przeliczyć liczbę binarną ręcznie

Najwygodniej zacząć od prawej strony. Prawej skrajnej cyfrze przypisuję wagę 20, czyli 1. Każda kolejna pozycja w lewo otrzymuje wagę dwa razy większą: 2, 4, 8, 16 i tak dalej.

Przykład z liczbą 101101

Rozpiszmy liczbę 1011012 od prawej strony:

1 × 25 + 0 × 24 + 1 × 23 + 1 × 22 + 0 × 21 + 1 × 20

Po obliczeniu potęg i pomnożeniu cyfr dostajemy:

32 + 0 + 8 + 4 + 0 + 1 = 45

Zatem 1011012 = 4510. Ten przykład dobrze pokazuje, że nie trzeba wykonywać żadnych skomplikowanych działań. Wystarczy pilnować numeracji pozycji i zaczynać od zera po prawej stronie.

Krótki przykład dla ośmiu bitów

W informatyce często spotkasz zapis o długości 8 bitów, na przykład 11001010. Wagi kolejnych pozycji wynoszą 128, 64, 32, 16, 8, 4, 2 i 1.

110010102 = 128 + 64 + 0 + 0 + 8 + 0 + 2 + 0 = 20210

Stała długość zapisu nie zmienia wartości. Liczby 101, 00000101 i 000000000101 oznaczają tę samą wartość, czyli 5, jeśli poprzedzające zera są tylko dopełnieniem zapisu.

Konwersja części ułamkowej i liczb ujemnych

Po przecinku zasada nadal działa, ale potęgi liczby 2 mają ujemne wykładniki. Pierwsza cyfra po przecinku ma wagę 2-1 = 0,5, następna 2-2 = 0,25, a każda kolejna jest o połowę mniejsza.

Przykład 101,1012 można zapisać tak:

1 × 22 + 0 × 21 + 1 × 20 + 1 × 2-1 + 0 × 2-2 + 1 × 2-3

Obliczenie wygląda następująco: 4 + 0 + 1 + 0,5 + 0 + 0,125 = 5,625. Otrzymujemy więc 101,1012 = 5,62510.

Przy liczbach ujemnych trzeba uważać. Sam zapis bitów nie zawsze wystarcza, ponieważ znaczenie zależy od przyjętej reprezentacji. Na przykład osiem bitów 11111111 oznacza 255 przy interpretacji bez znaku, ale w typowym zapisie uzupełnienia do dwóch może oznaczać -1. W zadaniach szkolnych najczęściej konwertuje się liczby dodatnie, natomiast w programowaniu trzeba znać typ danych i jego zakres.

Jak zrobić to w programie

W kodzie można skorzystać z gotowej funkcji albo napisać własny algorytm. Gotowe rozwiązanie jest krótkie, ale własna implementacja lepiej pokazuje, co naprawdę dzieje się podczas przeliczania i przydaje się w nauce podstaw programowania.

Gotowe funkcje w Pythonie i JavaScripcie

W Pythonie podstawą systemu podaje się jako drugi argument funkcji int():

liczba = int("101101", 2)
print(liczba)  # 45

W JavaScripcie podobną rolę pełni parseInt():

const liczba = parseInt("101101", 2);
console.log(liczba); // 45

Drugi argument, czyli 2, jest bardzo ważny. Informuje program, że tekst ma być odczytany jako liczba w systemie dwójkowym. Pominięcie tego argumentu może prowadzić do nieczytelnego kodu albo nieoczekiwanej interpretacji danych.

Przeczytaj również: Znak nierówności w programowaniu - !=, !== i ≠ w praktyce

Algorytm Hornera bez potęg

Praktyczniejsza metoda polega na przechodzeniu od lewej do prawej. Za każdym razem aktualny wynik mnożę przez 2 i dodaję bieżącą cyfrę. Dla ciągu 101101 wygląda to tak:

Krok Działanie Wynik
1 0 × 2 + 1 1
2 1 × 2 + 0 2
3 2 × 2 + 1 5
4 5 × 2 + 1 11
5 11 × 2 + 0 22
6 22 × 2 + 1 45

Własna funkcja w Pythonie może wyglądać tak:

def binarna_na_dziesietna(tekst):
    wynik = 0

    for znak in tekst:
        if znak not in ("0", "1"):
            raise ValueError("Dozwolone są tylko cyfry 0 i 1")
        wynik = wynik * 2 + int(znak)

    return wynik

print(binarna_na_dziesietna("101101"))  # 45

Algorytm wykonuje jeden obieg po znakach, więc dla liczby mającej n bitów działa w czasie O(n). To rozwiązanie jest czytelne, szybkie i nie wymaga tworzenia tablicy potęg liczby 2.

Najczęstsze błędy podczas obliczeń

Najczęściej problemem nie jest samo dodawanie, ale pomylenie kierunku liczenia. Waga 1 zawsze znajduje się po prawej stronie, nie po lewej. Jeśli zaczniesz przypisywać potęgi od lewej krawędzi, otrzymasz błędny wynik.

  • Traktowanie zapisu binarnego jak dziesiętnego, na przykład odczytanie 101 jako sto jeden.
  • Rozpoczęcie potęgowania od 21 zamiast od 20.
  • Pominięcie zer bez uwzględnienia ich pozycji.
  • Wpisanie cyfry większej niż 1, na przykład 1021, która nie jest poprawną liczbą binarną.
  • Pomylenie liczby bez znaku z liczbą ze znakiem przy analizie pełnych bajtów.

Sam sprawdzam wynik drugą metodą, gdy liczba ma więcej niż kilka bitów. Można na przykład obliczyć go najpierw przez potęgi, a potem algorytmem Hornera. Jeśli wyniki są różne, niemal zawsze błąd tkwi w przypisaniu wag albo w przepisaniu cyfry.

Dobrym szybkim testem jest też znalezienie największej potęgi dwójki obecnej w zapisie. Dla 101101 jest to 32, więc wynik musi być większy lub równy 32 i mniejszy od 64. Otrzymane 45 mieści się w tym zakresie, więc obliczenie jest prawdopodobne.

Co zapamiętać przed kolejnym zadaniem

Najkrótsza reguła brzmi: zacznij od prawej strony, przypisz pozycjom potęgi liczby 2 i dodaj wartości stojące przy cyfrach 1. W programie możesz użyć gotowej funkcji, ale znajomość algorytmu Hornera pozwala łatwo napisać własną konwersję i lepiej rozumieć działanie systemów liczbowych.

Przy prostych liczbach wystarczy kartka i kilka wag, a przy dłuższych zapisach najlepiej sprawdzi się kod lub kalkulator. Zawsze upewnij się jednak, że wejście zawiera tylko 0 i 1, a przy liczbach ujemnych sprawdź, czy zapis jest bez znaku, czy wykorzystuje uzupełnienie do dwóch.

FAQ - Najczęstsze pytania

Zacznij od prawej strony i przypisz kolejnym pozycjom potęgi 2 od 2^0. Dla 101101 obliczenie wygląda tak: 1 × 32 + 0 × 16 + 1 × 8 + 1 × 4 + 0 × 2 + 1 × 1 = 45.

Cyfry po przecinku mają ujemne potęgi liczby 2. W zapisie 101,101 pierwsza cyfra po przecinku ma wagę 0,5, a kolejne 0,25 i 0,125, dlatego wynik wynosi 4 + 1 + 0,5 + 0,125 = 5,625.

Znaczenie zależy od reprezentacji liczby. Przy interpretacji bez znaku 11111111 oznacza 255, natomiast w typowym ośmiobitowym zapisie uzupełnienia do dwóch oznacza -1.

W Pythonie można użyć int z podstawą 2, a w JavaScripcie parseInt z drugim argumentem równym 2. Własny algorytm Hornera przechodzi od lewej do prawej, mnoży bieżący wynik przez 2 i dodaje aktualną cyfrę, a także sprawdza, czy wejście zawiera wyłącznie 0 i 1.

Oceń artykuł

Ocena: 5.00 Liczba głosów: 1

Tagi:

liczby binarne python javascript systemy liczbowe algorytm hornera

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