Systemy Liczbowe w Informatyce
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
- Przyswojenie zasad konwersji z systemu dziesiętnego na pozostałe (metoda dzielenia z resztą).
- Opanowanie konwersji na system dziesiętny (metoda wag / potęg podstawy).
- Poznanie szybkiej metody zamiany między systemami o podstawie 2, 8 i 16.
- 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-9oraz literyA-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):
101010(BIN)->?(DEC)11111111(BIN)->?(DEC)100000(BIN)->?(DEC)77(OCT)->?(DEC)104(OCT)->?(DEC)FF(HEX)->?(DEC)1A(HEX)->?(DEC)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.