Systemy Liczbowe w Informatyce

UTK
Priorytet: Normalny Szkic

Zadanie 1000: Systemy Liczbowe w Informatyce

Wstęp

W świecie komputerów informacje nie są zapisywane w systemie dziesiętnym, z którego korzystamy na co dzień. Procesory opierają swoje działanie na prądzie elektrycznym, interpretując jego obecność (1) lub brak (0). Aby w pełni zrozumieć działanie i architekturę systemów komputerowych (UTK), musimy biegle poruszać się między różnymi systemami zapisu liczb: binarnym (dwójkowym), ósemkowym (oktalnym), dziesiętnym (decymalnym) i szesnastkowym (heksadecymalnym).

Cel zadania

Zrozumienie działania pozycyjnych systemów liczbowych, opanowanie metod konwersji pomiędzy najpopularniejszymi systemami (BIN, OCT, DEC, HEX) oraz samodzielne przeliczenie 20 podanych przykładów.

Wymagania techniczne

  1. Przyswojenie zasad konwersji z systemu dziesiętnego na pozostałe (metoda dzielenia z resztą).
  2. Opanowanie konwersji na system dziesiętny (metoda wag / potęg podstawy).
  3. Poznanie szybkiej metody zamiany między systemami o podstawie 2, 8 i 16.
  4. Wykonanie 20 przykładów konwersji.

Kroki do wykonania

1. Zrozumienie poszczególnych systemów

W informatyce najczęściej spotkasz cztery systemy:

  • Dziesiętny (DEC) - Podstawa 10. Cyfry: 0-9. System, którego używamy na co dzień.
  • Dwójkowy, Binarny (BIN) - Podstawa 2. Cyfry: 0-1. Język zrozumiały bezpośrednio przez procesory.
  • Ósemkowy, Oktalny (OCT) - Podstawa 8. Cyfry: 0-7. Kiedyś popularny w systemach uniksowych (np. uprawnienia plików - chmod 777).
  • Szesnastkowy, Heksadecymalny (HEX) - Podstawa 16. Cyfry: 0-9 oraz litery A-F (gdzie A=10, B=11, C=12, D=13, E=14, F=15). Bardzo zwięzły zapis, idealny do reprezentacji adresów pamięci, kolorów HTML (#FF0000) czy adresów MAC/IPv6.

2. Zamiana z systemu dziesiętnego (DEC -> BIN/OCT/HEX)

Aby zamienić liczbę dziesiętną na inny system, dzielimy ją całkowicie przez podstawę docelowego systemu, a reszty z dzielenia zapisujemy od końca (od dołu do góry).

Przykład: 13(DEC) na BIN (dzielimy przez 2):

  • 13 : 2 = 6, reszta 1
  • 6 : 2 = 3, reszta 0
  • 3 : 2 = 1, reszta 1
  • 1 : 2 = 0, reszta 1

Wynik czytany od dołu: 1101(BIN)

[!TIP] Tę samą zasadę stosujesz dla systemu ósemkowego (dzielisz przez 8) i szesnastkowego (dzielisz przez 16). Zwróć tylko uwagę, że w HEX reszta 10 to punkt wyjścia dla litery A.

3. Zamiana na system dziesiętny (BIN/OCT/HEX -> DEC)

Każda pozycja cyfry w liczbie ma swoją wagę (potęgę podstawy systemu, zaczynając od 0 od prawej strony).

Przykład: 1101(BIN) na DEC:

  • 1 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0
  • 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1
  • 8 + 4 + 0 + 1 = 13(DEC)

Przykład: 2A(HEX) na DEC:

  • 2 * 16^1 + A(czyli 10) * 16^0
  • 32 + 10 = 42(DEC)

4. Szybka zamiana między BIN, OCT, HEX

Z uwagi na to, że 8 i 16 to potęgi liczby 2, można zamieniać te systemy grupując bity.

  • BIN <-> OCT: Grupujemy po 3 bity od prawej strony.
  • BIN <-> HEX: Grupujemy po 4 bity od prawej (tzw. nibble / półbajt).

Przykład: 1011010(BIN) na HEX: Dzielimy na czwórki (od prawej dopisując zera z lewej dla wyrównania): 0101 i 1010 0101 (BIN) to 5 (DEC/HEX) 1010 (BIN) to 10 (DEC), czyli A (HEX) Wynik: 5A(HEX)

5. Zestaw 20 przykładów do samodzielnego rozwiązania

[!IMPORTANT] Zadanie dla Ciebie: Przelicz poniższe przykłady na kartce (lub w edytorze) nie używając gotowych kalkulatorów programistycznych. To pozwoli Ci wyrobić nawyk i intuicję w czytaniu systemów liczbowych.

Konwersja na system dziesiętny (DEC):

  1. 101010(BIN) -> ?(DEC)
  2. 11111111(BIN) -> ?(DEC)
  3. 100000(BIN) -> ?(DEC)
  4. 77(OCT) -> ?(DEC)
  5. 104(OCT) -> ?(DEC)
  6. FF(HEX) -> ?(DEC)
  7. 1A(HEX) -> ?(DEC)
  8. C0(HEX) -> ?(DEC)

Konwersja z systemu dziesiętnego (DEC): 9. 64(DEC) -> ?(BIN) 10. 127(DEC) -> ?(BIN) 11. 255(DEC) -> ?(BIN) 12. 100(DEC) -> ?(OCT) 13. 256(DEC) -> ?(HEX) 14. 48(DEC) -> ?(HEX)

Szybka konwersja (BIN <-> OCT <-> HEX): 15. 110110(BIN) -> ?(HEX) 16. 10111100(BIN) -> ?(HEX) 17. D3(HEX) -> ?(BIN) 18. 7F(HEX) -> ?(BIN) 19. 101011(BIN) -> ?(OCT) 20. 35(OCT) -> ?(BIN)

[!CAUTION] Pamiętaj, że w systemie HEX duże i małe litery (A-F, a-f) znaczą dokładnie to samo, jednak dobrą praktyką jest pisanie wielkimi literami, aby uniknąć pomyłek np. litery "b" z cyfrą "6".

Zadanie dla chętnych

Spróbuj napisać krótki skrypt w dowolnym języku programowania (np. Python, JavaScript), który będzie przyjmował jako wejście liczbę, jej źródłowy system liczbowy (2, 8, 10, 16) oraz docelowy system, a następnie poprawnie ją konwertował na ekranie. Użyj do tego celu wiedzy zdobytej powyżej, ale zamiast robienia wszystkiego ręcznie na pętlach i potęgach, znajdź wbudowane metody swojego języka konwertujące pomiędzy bazami.