Wszystkie zagadnienia: Algorytmy
podstawowy systemy liczbowebinarnematura podstawowa z informatyki

Konwersja binarno-dziesiętna

Zamiana liczby z systemu dwójkowego na dziesiętny przez dodawanie wag – potęg dwójki.

01

Opis

Konwersja binarno-dziesiętna to zamiana liczby zapisanej w systemie dwójkowym (same 0 i 1) na zwykłą liczbę dziesiętną, jakiej używamy na co dzień. Na przykład dwójkowe 1011 to dziesiętne 11.

Jak to działa? Każdy bit (cyfra dwójkowa) ma swoją wagę – to potęga dwójki zależna od miejsca, na którym stoi. Pozycje liczymy od prawej strony, zaczynając od zera: skrajny prawy bit ma wagę 1, następny 2, dalej 4, 8, 16 i tak dalej (kolejne wagi to po prostu podwojenie poprzedniej). Wynik dziesiętny to suma wag tych miejsc, na których stoi jedynka. Zera pomijamy, bo 0 razy cokolwiek to 0.

Przykład krok po kroku: dwójkowe 1011 czytamy jako 1·8 + 0·4 + 1·2 + 1·1. Jedynki stoją na wagach 8, 2 i 1, więc 8 + 2 + 1 = 11.

Dlaczego akurat potęgi dwójki? Bo w systemie dwójkowym mamy tylko dwie cyfry, tak jak w dziesiętnym mamy dziesięć. W liczbie dziesiętnej kolejne miejsca to wagi 1, 10, 100, … (potęgi dziesiątki). W dwójkowej analogicznie – tylko potęgi dwójki. To ta sama zasada, inna podstawa.

Na maturze: klasyk z systemów liczbowych, często w parze z konwersją w drugą stronę. Warto umieć to policzyć na kartce i zapisać algorytmem.

Wizualizacja

Prześledź krok po kroku, jak z liczby dwójkowej robimy dziesiętną. Każdy bit ma swoją wagę – potęgę dwójki zależną od pozycji (od prawej: 1, 2, 4, 8, …). Idziemy po bitach i za każdą jedynkę dodajemy jej wagę do sumy; zero pomijamy. Suma na końcu to szukana liczba dziesiętna.

18041211
Wartość dziesiętna0

Naciśnij „Krok", aby sprawdzić pierwszy bit, albo „Auto".

02

Pseudokod

funkcja binarna_na_dziesietna(B, n):
  // B – tablica bitów, n – liczba bitów
  wynik ← 0
  waga ← 1
  // idziemy od najmłodszego bitu (z prawej) do najstarszego
  dla i od n - 1 do 0 z krokiem -1:
    jeżeli B[i] = 1:
      wynik ← wynik + waga
    waga ← waga * 2       // kolejna waga to podwojona poprzednia
  zwróć wynik
03

Implementacja w Pythonie i C++

def binarna_na_dziesietna(b):
    """Zamienia napis z bitami (np. '1011') na liczbę dziesiętną."""
    wynik = 0
    waga = 1

    # idziemy od ostatniego bitu (z prawej) do pierwszego
    for i in range(len(b) - 1, -1, -1):
        if b[i] == '1':
            wynik += waga
        waga *= 2          # kolejna waga to podwojona poprzednia

    return wynik


# Przykłady użycia
print(binarna_na_dziesietna("1011"))      # Wynik: 11
print(binarna_na_dziesietna("11111111"))  # Wynik: 255

# W praktyce Python ma to wbudowane:
print(int("1011", 2))                     # Wynik: 11
04

Najczęściej zadawane pytania

Co to jest waga bitu?

To potęga dwójki przypisana do miejsca, na którym stoi bit. Licząc od prawej, kolejne wagi to 1, 2, 4, 8, 16, …. Bit 1 „warty" jest tyle, ile jego waga; bit 0 – nic.

Ile wynosi największa liczba na 8 bitach?

11111111, czyli 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 255. Ogólnie na n bitach da się zapisać liczby od 0 do 2ⁿ - 1.

Czy w Pythonie muszę pisać ten algorytm ręcznie?

Nie – wystarczy int("1011", 2), żeby dostać 11. Ale na maturze zwykle trzeba pokazać sposób, więc warto rozumieć, jak to liczyć „ręcznie".

Częsty błąd?

Zamiana stron – przypisywanie wagi 1 lewemu bitowi zamiast prawemu. Zawsze zaczynaj wagi od prawej strony liczby.

05

Ćwiczenie

Uzupełnij brakujące wartości i kliknij Sprawdź. Liczba dwójkowa 1011 to dziesiętnie , a 1111 to .

Uzupełnij wyniki konwersji w tabeli:

Liczba dwójkowaWartość dziesiętna
0010
0101
1000
1100

Wagi kolejnych pozycji, licząc od prawej, to: , , oraz .

Złożoność obliczeniowa

CzasowaO(n)
PamięciowaO(1)

Robimy jeden przebieg przez wszystkie bity liczby, więc liczba kroków rośnie tak jak liczba bitów n – stąd czas O(n). Pamięci używamy tyle samo niezależnie od długości liczby (trzymamy tylko sumę i aktualną wagę), więc O(1).

Przećwicz w zadaniach maturalnych

Te zadania CKE sprawdzają dokładnie to zagadnienie – link prowadzi wprost do treści podpunktu w arkuszu:

Więcej zadań: Programowanie

↗

Powiązane zagadnienia