Zamiana liczby z systemu dwójkowego na dziesiętny przez dodawanie wag – potęg dwójki.
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.
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.
Naciśnij „Krok", aby sprawdzić pierwszy bit, albo „Auto".
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
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#include <iostream>
#include <string>
using namespace std;
int binarna_na_dziesietna(const string& b) {
int wynik = 0;
int waga = 1;
// idziemy od ostatniego bitu (z prawej) do pierwszego
for (int i = (int)b.size() - 1; i >= 0; i--) {
if (b[i] == '1') {
wynik += waga;
}
waga *= 2; // kolejna waga to podwojona poprzednia
}
return wynik;
}
int main() {
cout << binarna_na_dziesietna("1011") << "\n"; // Wynik: 11
cout << binarna_na_dziesietna("11111111") << "\n"; // Wynik: 255
}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.
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.
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".
Zamiana stron – przypisywanie wagi 1 lewemu bitowi zamiast prawemu. Zawsze zaczynaj wagi od prawej strony liczby.
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ójkowa | Wartość dziesiętna |
|---|---|
| 0010 | |
| 0101 | |
| 1000 | |
| 1100 |
Wagi kolejnych pozycji, licząc od prawej, to: , , oraz .
O(n)O(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).
Te zadania CKE sprawdzają dokładnie to zagadnienie – link prowadzi wprost do treści podpunktu w arkuszu:
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: