|
Serwis Edukacyjny Nauczycieli I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
Naturalny system dwójkowy (ang. NBS - Natural Binary System) jest najprostszym systemem pozycyjnym, w którym podstawa p = 2. System posiada dwie cyfry 0 i 1, zatem można je kodować bezpośrednio jednym bitem informacji. Wartość liczby obliczamy zgodnie ze wzorem podanym w rozdziale o systemach pozycyjnych.
Zapamiętaj:Wartość dziesiętna liczby zapisanej w naturalnym kodzie binarnym
gdzie b - bit, cyfra dwójkowa 0 lub 1 |
Przykład:
Obliczyć wartość liczby dwójkowej 11100101(2).
| 11100101(2) = 1 · 27 + 1 · 26 + 1 · 25 + 0 · 24 + 0 · 23 + 1 · 22 + 0 · 21 + 1 · 20 11100101(2) = 1 · 128 + 1 · 64 + 1 · 32 + 0 · 16 + 0 · 8 + 1 · 4 + 0 · 2 + 1 · 1 11100101(2) = 128 + 64 + 32 + 4 + 1 11100101(2) = 229(10) |
Jeśli dokładnie przyjrzysz się powyższym obliczeniom, to na pewno zauważysz, iż w systemie binarnym w celu obliczenia wartości liczby wystarczy po prostu zsumować wagi pozycji, na których cyfry przyjmują wartość 1.
Przykład:
| 101011(2) = 25 + 23 + 21 + 20 = 32 + 8 + 2 + 1 = 43(10) |
Jest to znaczne uproszczenie w stosunku do innych systemów, gdzie musimy wykonywać mnożenia cyfr przez wagi pozycji. Tutaj albo dana waga występuje w wartości liczby (cyfra 1), albo nie występuje (cyfra 0). Nie na darmo system binarny jest najprostszym systemem pozycyjnym.
Bardzo ważne dla informatyka i programisty jest nauczenie się na pamięć pierwszych szesnastu liczb binarnych:
| dziesiętnie | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dwójkowo | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 |
Określmy, jaką największą liczbę dwójkową możemy zapisać za pomocą n bitów (czyli cyfr binarnych). Największa liczba musi posiadać same cyfry 1, czyli w wartości liczby muszą uczestniczyć wszystkie wagi pozycji. Zatem:
| dla 1b mamy | 1(2) | = 1(10) |
| dla 2b mamy | 11(2) | = 2 + 1 = 3(10) |
| dla 3b mamy | 111(2) | = 4 + 2 + 1 = 7(10) |
| dla 4b mamy | 1111(2) | = 8 + 4 + 2 + 1 = 15(10) |
| ... |
Otrzymujemy kolejne liczby:
| dla 1b mamy dla 2b mamy dla 3b mamy dla 4b mamy ... |
1 3 7 15 |
Liczby te tworzą prosty ciąg potęgowy:
| dla 1b mamy | 1 | = 21 - 1 |
| dla 2b mamy | 3 | = 22 - 1 |
| dla 3b mamy | 7 | = 23 - 1 |
| dla 4b mamy | 15 | = 24 - 1 |
| ... |
Wykładnik potęgowy liczby 2 jest równy ilości bitów, zatem dla n bitów otrzymujemy wzór:
Zapamiętaj:Zakres n bitowej liczby w naturalnym kodzie dwójkowym wynosi Z2= 0...2n- 1 |
Przykład:
Jaką największą liczbę dziesiętną można przedstawić przy pomocy 64 bitów?
Odp.
| 264 - 1 = 18446744073709551616 - 1 = 18446744073709551615 |
Schemat Hornera pozwala obliczyć wartość liczby binarnej przy minimalnej ilości operacji arytmetycznych. W systemie binarnym schemat ten jest bardzo prosty:
| Schemat Hornera dla systemu binarnego |
|---|
|
Wejście: ciąg cyfr binarnych
Wyjście: W - wartość liczby reprezentowanej przez ciąg cyfr binarnych K01:
W
|
Operację mnożenia 2 · W możemy zastąpić dodawaniem W + W. Dodawanie komputer wykonuje o wiele szybciej od mnożenia (jeszcze szybszą operacją jest przesunięcie bitów o jedną pozycję w lewo - taką operację wykonuje pojedynczy rozkaz procesora i jest ona jeszcze szybsza od dodawania!)..
Przykład:
Obliczyć schematem Hornera wartość liczby binarnej 111010111101(2)
| cyfra 1:
W = 1 cyfra 1: W = (1 + 1) + 1 = 3 cyfra 1: W = (3 + 3) + 1 = 7 cyfra 0: W = (7 + 7) + 0 = 14 cyfra 1: W = (14 + 14) + 1 = 29 cyfra 0: W = (29 + 29) + 0 = 58 cyfra 1: W = (58 + 58) + 1 = 117 cyfra 1: W = (117 + 117) + 1 = 235 cyfra 1: W = (235 + 235) + 1 = 471 cyfra 1: W = (471 + 471) + 1 = 943 cyfra 0: W = (943 + 943) + 0 = 1886 cyfra 1: W = (1886 + 1886) + 1 = 3773 - koniec |
Kolejne od końca cyfry binarne zapisu liczby w systemie dwójkowym otrzymamy jako reszty z dzielenia tej liczby przez 2. Metoda ta została dokładnie opisana w rozdziale poświęconym przeliczaniu liczb dziesiętnych na zapis w innych systemach liczbowych.
| Algorytm wyznaczania cyfr zapisu dwójkowego liczby |
|---|
|
Wejście: W - wartość liczby
Wyjście: ciąg cyfr binarnych reprezentujących w systemie dwójkowym wartość W
K01: kolejna cyfra ←
W
mod 2, W ← W
div
2 |
Przykład:
Przeliczyć na system dwójkowy liczbę 582642(10).
| 582642 div 2 = | 291321 | i reszta 0 |
| 291321 div 2 = | 145660 | i reszta 1 |
| 145660 div 2 = | 72830 | i reszta 0 |
| 72830 div 2 = | 36415 | i reszta 0 |
| 36415 div 2 = | 18207 | i reszta 1 |
| 18207 div 2 = | 9103 | i reszta 1 |
| 9103 div 2 = | 4551 | i reszta 1 |
| 4551 div 2 = | 2275 | i reszta 1 |
| 2275 div 2 = | 1137 | i reszta 1 |
| 1137 div 2 = | 568 | i reszta 1 |
| 568 div 2 = | 284 | i reszta 0 |
| 284 div 2 = | 142 | i reszta 0 |
| 142 div 2 = | 71 | i reszta 0 |
| 71 div 2 = | 35 | i reszta 1 |
| 35 div 2 = | 17 | i reszta 1 |
| 17 div 2 = | 8 | i reszta 1 |
| 8 div 2 = | 4 | i reszta 0 |
| 4 div 2 = | 2 | i reszta 0 |
| 2 div 2 = | 1 | i reszta 0 |
| 1 div 2 = | 0 | i reszta 1 - koniec, wynik odczytujemy w kierunku z dołu do góry |
| 582642(10) = 10001110001111110010(2) |
Program oblicza wartość liczby binarnej podanej jako ciąg cyfr. Ciekawostką jest to, iż ciąg ten nie jest ograniczony i może zawierać dowolną (w rozsądnych granicach) ilość cyfr binarnych. Wynik obliczany jest nie jako wartość liczbowa, lecz jako ciąg cyfr dziesiętnych. Dzięki temu nie jesteśmy ograniczani zakresem zmiennych całkowitych.
Wartość liczby binarnej obliczamy podanym powyżej schematem Hornera.
C++// Obliczanie wartości
// dowolnej liczby dwójkowej
//---------------------------
// (C)2005 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// w Tarnowie
//---------------------------
#include <iostream>
#include <string>
using namespace std;
main()
{
string bs,ds;
int i,j,c,p,s;
cout << "Wartosc dziesietna\n"
"liczby binarnej\n"
"====================\n"
"(C)2005\n"
"mgr Jerzy Walaszek\n"
"I LO w Tarnowie\n\n"
"Liczba binarna: ";
cin >> bs;
cout << endl;
ds = "0";
i = 0;
while((i < (int)bs.length()) &&
((bs[i] == '0') ||
(bs[i] == '1')))
{
// Przeniesienie
p = 0;
// Cyfra binarna
c = bs[i] - 48;
for(j = ds.length() - 1;
j >= 0;
j--)
{
// Schemat Hornera
s = 2 * (ds[j] - 48) +
c + p;
c = 0;
// Wyznaczamy przeniesienie
// do następnej kolumny
p = s / 10;
// Cyfrę wynikową zapisujemy
// w miejscu docelowym
ds[j] = (char)((s % 10) + 48);
// Jeśli po wyczerpaniu cyfr
// ds przeniesienie p ma
// wartość większą od zera,
// to jest ono równe pierwszej
// cyfrze
if(!j && p)
ds = (char)(p + 48) + ds;
}
// Następna cyfra binarna
i++;
}
cout << "Wartosc dziesietna "
"liczby binarnej:\n\n"
<< ds << endl << endl;
system("pause");
return 0;
}
|
Pascal// Obliczanie wartości
// dowolnej liczby dwójkowej
//---------------------------
// (C)2005 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// w Tarnowie
//---------------------------
program bindec;
{$APPTYPE CONSOLE}
var
bs,ds : string;
i,j,c,p,s : cardinal;
begin
writeln('Wartosc dziesietna');
writeln('liczby binarnej');
writeln('====================');
writeln('(C)2005');
writeln('mgr Jerzy Walaszek');
writeln('I LO w Tarnowie');
writeln;
writeln('Liczba binarna:');
writeln;
readln(bs);
writeln;
ds := '0';
i := 1;
while (i <= length(bs)) and
(bs[i] in ['0'..'1']) do
begin
// Przeniesienie
p := 0;
// Cyfra binarna
c := ord(bs[i]) - 48;
for j := length(ds) downto 1 do
begin
// Schemat Hornera
s := 2 * (ord(ds[j]) - 48) +
c + p;
c := 0;
// Wyznaczamy przeniesienie
// do następnej kolumny
p := s div 10;
// Cyfrę wynikową zapisujemy
// w miejscu docelowym
ds[j] := char((s mod 10) + 48);
// Jeśli po wyczerpaniu cyfr
// ds przeniesienie p ma
// wartość większą od zera,
// to jest ono równe pierwszej
// cyfrze
if (j = 1) and (p > 0) then
ds := char(p + 48) + ds;
end;
// Następna cyfra binarna
inc(i);
end;
writeln('Wartosc dziesietna ' +
'liczby binarnej:');
writeln;
writeln(ds);
writeln;
writeln('Nacisnij Enter...');
readln;
end.
|
Basic' Obliczanie wartości
' dowolnej liczby dwójkowej
'---------------------------
' (C)2005 mgr Jerzy Wałaszek
' I Liceum Ogólnokształcące
' w Tarnowie
'---------------------------
Dim As String bs, ds
Dim As Integer i, j, c, p, s
Print "Wartosc dziesietna"
Print "liczby binarnej"
Print "===================="
Print "(C)2005"
Print "mgr Jerzy Walaszek"
Print "I LO w Tarnowie"
Print
Print "Liczba binarna:"
Print
Input bs
Print
ds = "0"
i = 0
While i < Len(bs)
If (bs[i] < 48) Or (bs[i] > 49) Then _
Exit While
' Przeniesienie
p = 0
' Cyfra binarna
c = bs[i] - 48
For j = Len(ds) - 1 To 0 Step -1
' Schemat Hornera
s = 2 * (ds[j] - 48) + c + p
c = 0
' Wyznaczamy przeniesienie
' do następnej kolumny
p = s \ 10
' Cyfrę wynikową zapisujemy
' w miejscu docelowym
ds[j] = (s Mod 10) + 48
' Jeśli po wyczerpaniu cyfr
' ds przeniesienie p ma wartość
' większą od zera, to jest ono
' równe pierwszej cyfrze
If (j = 0) And (p > 0) Then _
ds = Chr(p + 48) + ds
Next
' Następna cyfra binarna
i += 1
Wend
Print "Wartosc liczby binarnej:"
Print
Print ds
Print
Print "sNacisnij dowolny klawisz..."
Sleep
End
|
Python
(dodatek)# Obliczanie wartości
# dowolnej liczby dwójkowej
#---------------------------
# (C)2005 mgr Jerzy Wałaszek
# I Liceum Ogólnokształcące
# w Tarnowie
#---------------------------
print("Wartość dziesiętna")
print("liczby binarnej")
print("====================")
print("(C)2005")
print("mgr Jerzy Walaszek")
print("I LO w Tarnowie")
print()
print("Liczba binarna:")
print()
bs = input()
print()
ds = "0"
i = 0
while i < len(bs):
if (bs[i] < "0") or \
(bs[i] > '1'):
break
# Przeniesienie
p = 0
# Cyfra binarna
c = ord(bs[i]) - 48
for j in reversed(range(len(ds))):
# Schemat Hornera
s = 2 * (ord(ds[j]) - 48) + c + p
c = 0
# Wyznaczamy przeniesienie
# do następnej kolumny
p = s // 10
# Cyfrę wynikową zapisujemy
# w miejscu docelowym
ds = ds[:j] + chr((s % 10) + 48) \
+ ds[j + 1:]
# Jeśli po wyczerpaniu cyfr
# ds przeniesienie p ma wartość
# większą od zera, to jest ono
# równe pierwszej cyfrze
if (not j) and (p > 0):
ds = chr(p + 48) + ds
# Następna cyfra binarna
i += 1
print("Wartość liczby binarnej:")
print()
print(ds)
print()
input("Naciśnij dowolny klawisz...")
|
| Wynik: |
| Wartość dziesiętna liczby binarnej ==================== (C)2005 mgr Jerzy Walaszek I LO w Tarnowie Liczba binarna: 10111111101101101 Wartość liczby binarnej: 98157 Naciśnij dowolny klawisz... |
Język Python nie posiada ograniczeń na wielkość liczby całkowitej. Umożliwia to utworzenie bardzo prostego kodu:
Python
(dodatek)# Obliczanie wartości
# dowolnej liczby dwójkowej
#---------------------------
# (C)2026 mgr Jerzy Wałaszek
# I Liceum Ogólnokształcące
# w Tarnowie
#---------------------------
print("Wartość dziesiętna")
print("liczby binarnej")
print("====================")
print("(C)2005")
print("mgr Jerzy Walaszek")
print("I LO w Tarnowie")
print()
print("Liczba dwójkowa:")
print()
# Tutaj jest całe przeliczenie!
#------------------
d = int(input(), 2)
#------------------
print("Wartość dziesiętna:")
print()
print(d)
print()
input("Naciśnij dowolny klawisz...")
|
JavaScript<html>
<head>
</head>
<body>
<div style="overflow-x: auto;"
align="center">
<table
border="0"
cellpadding="4"
style="border-collapse:
collapse">
<tr>
<td nowrap>
<form
name="frm"
style="text-align: center;
background-color:
#E7E7DA"
class="nomargin">
<b>Obliczanie wartości
dziesiętnej<br/>
dowolnej liczby
binarnej</b>
<br/><br/>
(C)2026
mgr Jerzy Wałaszek
I LO w Tarnowie
<hr/>
<table
style="border-collapse:
collapse;"
border="0"
cellpadding="4"
cellspacing="4"
class="nomargin">
<tr>
<td align="center">
Wprowadź poniżej
liczbę binarną
</td>
</tr>
<tr>
<td align="center">
<input
value="10111111101101101"
name="inp_bs"
size="40"
style="text-align:
right;">
</td>
</tr>
<tr>
<td align="center">
<input
onclick="main();"
value="Przelicz"
name="B1"
type="button">
</td>
</tr>
</table>
<hr/>
<b>Wynik:</b>
<div id="out">.</div>
</form>
</td>
</tr>
</table>
</div>
<script language="javascript">
// Obliczanie wartości dowolnej
// liczby dwójkowej
//-----------------------------
// (C)2005 mgr Jerzy Wałaszek
// I Liceum Ogólnokształcące
// w Tarnowie
//-----------------------------
function main()
{
var bs,ds,i,j,c,p,s;
bs = document.frm.inp_bs.value;
ds = "0";
i = 0;
while((i < bs.length) &&
((bs.charAt(i) == '0') ||
(bs.charAt(i) == '1')))
{
// Przeniesienie
p = 0;
// Cyfra binarna
c = bs.charCodeAt(i) - 48;
for(j = ds.length - 1;
j >= 0;
j--)
{
// Schemat Hornera
s = 2 * (ds.charCodeAt(j) -
48) + c + p;
c = 0;
// Wyznaczamy przeniesienie
// do następnej kolumny
p = Math.floor(s / 10);
// Cyfrę wynikową zapisujemy
// w miejscu docelowym
ds = ds.substr(0,j) +
String.fromCharCode((s % 10) +
48) + ds.substring(j + 1,
ds.length);
// Jeśli po wyczerpaniu cyfr
// ds przeniesienie p ma wartość
// większą od zera, to jest ono
// równe pierwszej cyfrze
if(!j && p)
ds = String.fromCharCode(p
+ 48) + ds;
}
// Następna cyfra binarna
i++;
};
document.getElementById("out")
.innerHTML = ds;
}
</script>
</body>
</html> |
Oblicz wartość następujących liczb binarnych:
Przelicz na system dwójkowy podane poniżej liczby dziesiętne:
Ile razy wzrośnie zakres n-bitowych liczb binarnych, gdy liczbę bitów zwiększymy o 1, 2, 3, 4, m bitów? Odpowiedź uzasadnij.
Zobacz dalej...
Kody binarne | Dwójkowy system stałoprzecinkowy | Operacje arytmetyczne w systemie dwójkowym | Operacje logiczne na bitach | Konwersje dwójkowo ósemkowe i szesnastkowe
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.