System dwojkowy, osemkowy, szesnastkowy - jak komputer przechowuje liczby
ð Podstawa programowa: I.2aSystem liczbowy to sposob zapisywania liczb za pomoca cyfr. System, ktorego uzywamy na co dzien, to system dziesietny (decymalny, DEC) - uzywa 10 cyfr: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
W pozycyjnym systemie liczbowym wartosc cyfry zalezy od jej pozycji w liczbie. Na przyklad w liczbie 352:
Komputery uzywaja systemu dwojkowego, poniewaz ich elementy elektroniczne maja dwa stany: wlaczony (1) i wylaczony (0). Kazda cyfra binarna to jeden bit (binary digit). 8 bitow to 1 bajt.
System binarny uzywa tylko dwoch cyfr: 0 i 1.
Pozycje w systemie binarnym (od prawej):
Pozycja: 7 6 5 4 3 2 1 0
Wartosc: 128 64 32 16 8 4 2 1
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
Przyklad: 1011 0110 w systemie binarnym:
1x128 + 0x64 + 1x32 + 1x16 + 0x8 + 1x4 + 1x2 + 0x1
= 128 + 0 + 32 + 16 + 0 + 4 + 2 + 0
= 182 (DEC)
System osemkowy uzywa cyfr od 0 do 7. Jest wygodny, poniewaz kazda cyfra osemkowa odpowiada dokladnie 3 bitom.
Pozycje w systemie osemkowym:
Pozycja: 3 2 1 0
Wartosc: 512 64 8 1
8^3 8^2 8^1 8^0
Przyklad: 275 w systemie osemkowym:
2x64 + 7x8 + 5x1 = 128 + 56 + 5 = 189 (DEC)
System szesnastkowy uzywa 16 znakow: 0-9 oraz A=10, B=11, C=12, D=13, E=14, F=15. Kazda cyfra szesnastkowa odpowiada dokladnie 4 bitom. HEX jest powszechnie stosowany w informatyce do zapisu kolorow (#FF0000 = czerwony), adresow pamieci i kodow bledow.
Pozycje w systemie szesnastkowym:
Pozycja: 3 2 1 0
Wartosc: 4096 256 16 1
16^3 16^2 16^1 16^0
Przyklad: 2A3F w systemie szesnastkowym:
2x4096 + 10x256 + 3x16 + 15x1
= 8192 + 2560 + 48 + 15 = 10815 (DEC)
DEC | BIN | OCT | HEX
-------+------------+-------+------
0 | 0000 | 0 | 0
1 | 0001 | 1 | 1
2 | 0010 | 2 | 2
3 | 0011 | 3 | 3
4 | 0100 | 4 | 4
5 | 0101 | 5 | 5
6 | 0110 | 6 | 6
7 | 0111 | 7 | 7
8 | 1000 | 10 | 8
9 | 1001 | 11 | 9
10 | 1010 | 12 | A
11 | 1011 | 13 | B
12 | 1100 | 14 | C
13 | 1101 | 15 | D
14 | 1110 | 16 | E
15 | 1111 | 17 | F
16 | 10000 | 20 | 10
255 | 11111111 | 377 | FF
Python ma wbudowane funkcje do konwersji miedzy systemami:
# Konwersja DEC na inne systemy
print(bin(42)) # '0b101010' - binarny
print(oct(42)) # '0o52' - osemkowy
print(hex(42)) # '0x2a' - szesnastkowy
# Konwersja z innych systemow na DEC
print(int('101010', 2)) # 42 - z binarnego
print(int('52', 8)) # 42 - z osemkowego
print(int('2a', 16)) # 42 - z szesnastkowego
Zamien nastepujace liczby binarne na dziesietne:
a) 10102
b) 11002
c) 11112
a) 1010 = 1x8 + 0x4 + 1x2 + 0x1 = 10
b) 1100 = 1x8 + 1x4 + 0x2 + 0x1 = 12
c) 1111 = 1x8 + 1x4 + 1x2 + 1x1 = 15
Zamien nastepujace liczby szesnastkowe na dziesietne:
a) 1F16
b) A516
c) FF16
a) 1F = 1x16 + 15x1 = 31
b) A5 = 10x16 + 5x1 = 165
c) FF = 15x16 + 15x1 = 255
Wykonaj nastepujace konwersje:
a) 4510 na BIN
b) 1101012 na DEC
c) 778 na DEC
d) B816 na DEC
a) 45 / 2 = 22 r 1
22 / 2 = 11 r 0
11 / 2 = 5 r 1
5 / 2 = 2 r 1
2 / 2 = 1 r 0
1 / 2 = 0 r 1
Odczytujemy od dolu: 101101
b) 110101 = 1x32 + 1x16 + 0x8 + 1x4 + 0x2 + 1x1 = 53
c) 77 (OCT) = 7x8 + 7x1 = 63
d) B8 (HEX) = 11x16 + 8x1 = 184
Kolory na stronach internetowych zapisujemy w formacie #RRGGBB (szesnastkowo). Okresl skladowe RGB (w systemie dziesietnym) dla kolorow:
a) #FF0000
b) #00FF00
c) #0000FF
d) #808080
e) #FFA500
a) #FF0000 -> R=255, G=0, B=0 (czerwony)
b) #00FF00 -> R=0, G=255, B=0 (zielony)
c) #0000FF -> R=0, G=0, B=255 (niebieski)
d) #808080 -> R=128, G=128, B=128 (szary)
e) #FFA500 -> R=255, G=165, B=0 (pomaranczowy)
Napisz program w Pythonie, ktory pobiera od uzytkownika liczbe dziesietna i wyswietla ja w systemie binarnym, osemkowym i szesnastkowym. Nie uzywaj wbudowanych funkcji bin(), oct(), hex().
def konwertuj(liczba, podstawa):
if liczba == 0:
return "0"
cyfry = "0123456789ABCDEF"
wynik = ""
while liczba > 0:
reszta = liczba % podstawa
wynik = cyfry[reszta] + wynik
liczba = liczba // podstawa
return wynik
n = int(input("Podaj liczbe dziesietna: "))
print(f"Binarnie: {konwertuj(n, 2)}")
print(f"Osemkowo: {konwertuj(n, 8)}")
print(f"Szesnastkowo: {konwertuj(n, 16)}")