Jak zapisywać liczby: systemy liczbowe
System dziesiętny nie jest jedynym. Przyjrzyjmy się notacjom binarnym, ósemkowym i szesnastkowym oraz dlaczego programista w ogóle ich potrzebuje.
Jesteśmy przyzwyczajeni do zapisywania liczb w dziesiętnym system (base 10) — dziesięć cyfry, od 0 do 9. Ale to nie jedyny sposób, a komputery często korzystają z innych Systemy liczbowe.
Cztery systemy, które napotkasz
| System | Fundacja | Liczby | Python-literal |
|---|---|---|---|
| Dziesiętna (decimal) | 10 | 0–9 | 10 |
| Binarność (binary) | 2 | 0–1 | 0b1010 |
| Oktalny (octal) | 8 | 0–7 | 0o12 |
| Szesnastkowy (hexadecimal) | 16 | 0–9, A–F | 0xA |
Jak czytać notację pozycyjną
W każdym systemie liczbowym każda pozycja cyfry ma swoją „wagę” — potęgę podstawy.
Weźmy liczbę binarną 1010:
Dokładnie ta sama zasada działa również dla systemu dziesiętnego, którego używasz codziennie — po prostu wagi pozycji tam są 1000, 100, 10, 1 (moc dziesiątki), a nie potęgi dwójki.
Dlaczego programiście potrzebny jest system szesnastkowy
Zapis szesnastkowy spotyka się w praktyce znacznie częściej, niż się wydaje:
- Kolory w internecie i grafice:
#FF0000— jaskrawoczerwony; - Wzorce bajt/bit — kompaktowe zapisywanie danych binarnych;
- Protokoły sieciowe i formaty plików — MAC- adresy, sumy skrótu;
- Symbole Unicode — kod symbolu często jest zapisywany w hex (patrząc w przyszłość, Więcej o Unicode w rozdziale o liniach).
red = 0xFF
print(red) # 255
Funkcje bin(), oct(), hex()
Przekonwertować liczbę Z notacji dziesiętnej na łańcuch znaków o innym systemie liczbowym:
print(bin(10)) # '0b1010'
print(oct(10)) # '0o12'
print(hex(10)) # '0xa'
int() z oznaczeniem podstawy – transformacja odwrotna
Funkcja int() dwoma argumentami robi odwrotnie —
odczytuje tekst w określonym układzie liczbowym i zwraca regularną (dziesiętną) liczbę:
print(int("1010", 2)) # 10
print(int("FF", 16)) # 255
bin() oraz hex() — a następnie przetłumaczyć wynik z powrotem int(..., 2) oraz int(..., 16)upewnić się, że dostaniesz ten sam numer.