Zamiana z systemu binarnegosystem binarnysystemu binarnego na system szesnastkowysystem heksadecymalnysystem szesnastkowy może być przeprowadzana na różne sposoby. Jeden z nich wykorzystuje bazy skojarzone.

Algorytm zamiany liczby z systemu binarnego na szesnastkowy wykorzystujący bazy skojarzone

Aby skonwertować naturalną liczbę binarną na zapisaną w systemie szesnastkowym, możemy skorzystać z faktu, że mamy do czynienia z systemami liczbowymi o bazach skojarzonych. Ponieważ podstawa systemu heksadecymalnego (16) to czwarta potęga podstawy systemu binarnego (2), do zapisania jednej cyfry heksadecymalnej potrzebujemy dokładnie 4 cyfr binarnych. Zapiszmy algorytm, w którym skorzystamy z tej zależności.

Zacznijmy od zapisania zmiennych. Zmienna liczba_binarna przechowuje wartość liczby zapisanej w systemie dwójkowym. Zmienna liczba_szesnastkowa przechowuje wartość liczby po konwersji na system szesnastkowy.

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów.

Na początku upewniamy się, że liczba cyfr przetwarzanej liczby binarnej będzie wielokrotnością liczby 4. W przeciwnym wypadku ustalamy liczbę zer, o które musimy uzupełnić liczbę, aby składała się z czterocyfrowych bloków. W tym celu obliczamy resztę z dzieleniareszta z dzieleniaresztę z dzielenia liczby cyfr przez 4 i odejmujemy tę resztę od 4. Otrzymana wartość będzie liczbą zer, które dopisujemy po lewej stronie liczby binarnej:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna.

Każdą grupę czterech cyfr (bitów) zapisujemy w postaci jednej cyfry heksadecymalnej. Oznacza to, że musimy przemyśleć, jaka struktura danych będzie najodpowiedniejsza do zapisu czteroelementowych ciągów cyfr i odpowiadających im cyfr heksadecymalnych. Do realizacji tego zadania idealnie nadaje się słownik:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna. Linia 10. mapowanie znak równości otwórz nawias klamrowy. Linia 11. cudzysłów 0000 cudzysłów dwukropek cudzysłów 0 cudzysłów przecinek. Linia 12. cudzysłów 0001 cudzysłów dwukropek cudzysłów 1 cudzysłów przecinek. Linia 13. cudzysłów 0010 cudzysłów dwukropek cudzysłów 2 cudzysłów przecinek. Linia 14. cudzysłów 0011 cudzysłów dwukropek cudzysłów 3 cudzysłów przecinek. Linia 15. cudzysłów 0100 cudzysłów dwukropek cudzysłów 4 cudzysłów przecinek. Linia 16. cudzysłów 0101 cudzysłów dwukropek cudzysłów 5 cudzysłów przecinek. Linia 17. cudzysłów 0110 cudzysłów dwukropek cudzysłów 6 cudzysłów przecinek. Linia 18. cudzysłów 0111 cudzysłów dwukropek cudzysłów 7 cudzysłów przecinek. Linia 19. cudzysłów 1000 cudzysłów dwukropek cudzysłów 8 cudzysłów przecinek. Linia 20. cudzysłów 1001 cudzysłów dwukropek cudzysłów 9 cudzysłów przecinek. Linia 21. cudzysłów 1010 cudzysłów dwukropek cudzysłów A cudzysłów przecinek. Linia 22. cudzysłów 1011 cudzysłów dwukropek cudzysłów B cudzysłów przecinek. Linia 23. cudzysłów 1100 cudzysłów dwukropek cudzysłów C cudzysłów przecinek. Linia 24. cudzysłów 1101 cudzysłów dwukropek cudzysłów D cudzysłów przecinek. Linia 25. cudzysłów 1110 cudzysłów dwukropek cudzysłów E cudzysłów przecinek. Linia 26. cudzysłów 1111 cudzysłów dwukropek cudzysłów F cudzysłów przecinek. Linia 27. zamknij nawias klamrowy.

Rozpatrzymy grupy po 4 cyfry. Innymi słowy, chcemy przeanalizować grupę bitów o indeksach od 0 do 3, od 4 do 7 itd. Kolejne indeksy początkowe analizowanych grup to wielokrotności liczby 4. Skorzystamy więc z funkcji range, której trzecim parametrem jest krok wynoszący w tym przypadku 4:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna. Linia 10. mapowanie znak równości otwórz nawias klamrowy. Linia 11. cudzysłów 0000 cudzysłów dwukropek cudzysłów 0 cudzysłów przecinek. Linia 12. cudzysłów 0001 cudzysłów dwukropek cudzysłów 1 cudzysłów przecinek. Linia 13. cudzysłów 0010 cudzysłów dwukropek cudzysłów 2 cudzysłów przecinek. Linia 14. cudzysłów 0011 cudzysłów dwukropek cudzysłów 3 cudzysłów przecinek. Linia 15. cudzysłów 0100 cudzysłów dwukropek cudzysłów 4 cudzysłów przecinek. Linia 16. cudzysłów 0101 cudzysłów dwukropek cudzysłów 5 cudzysłów przecinek. Linia 17. cudzysłów 0110 cudzysłów dwukropek cudzysłów 6 cudzysłów przecinek. Linia 18. cudzysłów 0111 cudzysłów dwukropek cudzysłów 7 cudzysłów przecinek. Linia 19. cudzysłów 1000 cudzysłów dwukropek cudzysłów 8 cudzysłów przecinek. Linia 20. cudzysłów 1001 cudzysłów dwukropek cudzysłów 9 cudzysłów przecinek. Linia 21. cudzysłów 1010 cudzysłów dwukropek cudzysłów A cudzysłów przecinek. Linia 22. cudzysłów 1011 cudzysłów dwukropek cudzysłów B cudzysłów przecinek. Linia 23. cudzysłów 1100 cudzysłów dwukropek cudzysłów C cudzysłów przecinek. Linia 24. cudzysłów 1101 cudzysłów dwukropek cudzysłów D cudzysłów przecinek. Linia 25. cudzysłów 1110 cudzysłów dwukropek cudzysłów E cudzysłów przecinek. Linia 26. cudzysłów 1111 cudzysłów dwukropek cudzysłów F cudzysłów przecinek. Linia 27. zamknij nawias klamrowy. Linia 29. for i in range otwórz nawias okrągły 0 przecinek len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły przecinek 4 zamknij nawias okrągły dwukropek. Linia 30. pass.

W każdym przebiegu pętli chcemy przeanalizować jedną czteroelementową grupę bitów – zapiszmy ją więc do zmiennej z użyciem wycinków:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna. Linia 10. mapowanie znak równości otwórz nawias klamrowy. Linia 11. cudzysłów 0000 cudzysłów dwukropek cudzysłów 0 cudzysłów przecinek. Linia 12. cudzysłów 0001 cudzysłów dwukropek cudzysłów 1 cudzysłów przecinek. Linia 13. cudzysłów 0010 cudzysłów dwukropek cudzysłów 2 cudzysłów przecinek. Linia 14. cudzysłów 0011 cudzysłów dwukropek cudzysłów 3 cudzysłów przecinek. Linia 15. cudzysłów 0100 cudzysłów dwukropek cudzysłów 4 cudzysłów przecinek. Linia 16. cudzysłów 0101 cudzysłów dwukropek cudzysłów 5 cudzysłów przecinek. Linia 17. cudzysłów 0110 cudzysłów dwukropek cudzysłów 6 cudzysłów przecinek. Linia 18. cudzysłów 0111 cudzysłów dwukropek cudzysłów 7 cudzysłów przecinek. Linia 19. cudzysłów 1000 cudzysłów dwukropek cudzysłów 8 cudzysłów przecinek. Linia 20. cudzysłów 1001 cudzysłów dwukropek cudzysłów 9 cudzysłów przecinek. Linia 21. cudzysłów 1010 cudzysłów dwukropek cudzysłów A cudzysłów przecinek. Linia 22. cudzysłów 1011 cudzysłów dwukropek cudzysłów B cudzysłów przecinek. Linia 23. cudzysłów 1100 cudzysłów dwukropek cudzysłów C cudzysłów przecinek. Linia 24. cudzysłów 1101 cudzysłów dwukropek cudzysłów D cudzysłów przecinek. Linia 25. cudzysłów 1110 cudzysłów dwukropek cudzysłów E cudzysłów przecinek. Linia 26. cudzysłów 1111 cudzysłów dwukropek cudzysłów F cudzysłów przecinek. Linia 27. zamknij nawias klamrowy. Linia 29. for i in range otwórz nawias okrągły 0 przecinek len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły przecinek 4 zamknij nawias okrągły dwukropek. Linia 30. bity znak równości liczba podkreślnik binarna otwórz nawias kwadratowy i dwukropek i plus 4 zamknij nawias kwadratowy.

Ostatnim krokiem jest dopisanie cyfry heksadecymalnej do zmiennej liczba_szesnastkowa. W tym celu wystarczy pobrać ze słownika mapowanie napis odpowiadający wartości zmiennej bity:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna. Linia 10. mapowanie znak równości otwórz nawias klamrowy. Linia 11. cudzysłów 0000 cudzysłów dwukropek cudzysłów 0 cudzysłów przecinek. Linia 12. cudzysłów 0001 cudzysłów dwukropek cudzysłów 1 cudzysłów przecinek. Linia 13. cudzysłów 0010 cudzysłów dwukropek cudzysłów 2 cudzysłów przecinek. Linia 14. cudzysłów 0011 cudzysłów dwukropek cudzysłów 3 cudzysłów przecinek. Linia 15. cudzysłów 0100 cudzysłów dwukropek cudzysłów 4 cudzysłów przecinek. Linia 16. cudzysłów 0101 cudzysłów dwukropek cudzysłów 5 cudzysłów przecinek. Linia 17. cudzysłów 0110 cudzysłów dwukropek cudzysłów 6 cudzysłów przecinek. Linia 18. cudzysłów 0111 cudzysłów dwukropek cudzysłów 7 cudzysłów przecinek. Linia 19. cudzysłów 1000 cudzysłów dwukropek cudzysłów 8 cudzysłów przecinek. Linia 20. cudzysłów 1001 cudzysłów dwukropek cudzysłów 9 cudzysłów przecinek. Linia 21. cudzysłów 1010 cudzysłów dwukropek cudzysłów A cudzysłów przecinek. Linia 22. cudzysłów 1011 cudzysłów dwukropek cudzysłów B cudzysłów przecinek. Linia 23. cudzysłów 1100 cudzysłów dwukropek cudzysłów C cudzysłów przecinek. Linia 24. cudzysłów 1101 cudzysłów dwukropek cudzysłów D cudzysłów przecinek. Linia 25. cudzysłów 1110 cudzysłów dwukropek cudzysłów E cudzysłów przecinek. Linia 26. cudzysłów 1111 cudzysłów dwukropek cudzysłów F cudzysłów przecinek. Linia 27. zamknij nawias klamrowy. Linia 29. for i in range otwórz nawias okrągły 0 przecinek len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły przecinek 4 zamknij nawias okrągły dwukropek. Linia 30. bity znak równości liczba podkreślnik binarna otwórz nawias kwadratowy i dwukropek i plus 4 zamknij nawias kwadratowy. Linia 31. liczba podkreślnik szesnastkowa plus znak równości mapowanie otwórz nawias kwadratowy bity zamknij nawias kwadratowy.

Pełen kod programu wraz z wypisaniem wyniku:

Linia 1. liczba podkreślnik binarna znak równości cudzysłów 10011110011 cudzysłów. Linia 2. liczba podkreślnik szesnastkowa znak równości cudzysłów cudzysłów. Linia 4. do podkreślnik dopisania znak równości 0. Linia 5. if len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4 dwukropek. Linia 6. do podkreślnik dopisania znak równości 4 minus len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły procent 4. Linia 8. liczba podkreślnik binarna znak równości cudzysłów 0 cudzysłów asterysk do podkreślnik dopisania plus liczba podkreślnik binarna. Linia 10. mapowanie znak równości otwórz nawias klamrowy. Linia 11. cudzysłów 0000 cudzysłów dwukropek cudzysłów 0 cudzysłów przecinek. Linia 12. cudzysłów 0001 cudzysłów dwukropek cudzysłów 1 cudzysłów przecinek. Linia 13. cudzysłów 0010 cudzysłów dwukropek cudzysłów 2 cudzysłów przecinek. Linia 14. cudzysłów 0011 cudzysłów dwukropek cudzysłów 3 cudzysłów przecinek. Linia 15. cudzysłów 0100 cudzysłów dwukropek cudzysłów 4 cudzysłów przecinek. Linia 16. cudzysłów 0101 cudzysłów dwukropek cudzysłów 5 cudzysłów przecinek. Linia 17. cudzysłów 0110 cudzysłów dwukropek cudzysłów 6 cudzysłów przecinek. Linia 18. cudzysłów 0111 cudzysłów dwukropek cudzysłów 7 cudzysłów przecinek. Linia 19. cudzysłów 1000 cudzysłów dwukropek cudzysłów 8 cudzysłów przecinek. Linia 20. cudzysłów 1001 cudzysłów dwukropek cudzysłów 9 cudzysłów przecinek. Linia 21. cudzysłów 1010 cudzysłów dwukropek cudzysłów A cudzysłów przecinek. Linia 22. cudzysłów 1011 cudzysłów dwukropek cudzysłów B cudzysłów przecinek. Linia 23. cudzysłów 1100 cudzysłów dwukropek cudzysłów C cudzysłów przecinek. Linia 24. cudzysłów 1101 cudzysłów dwukropek cudzysłów D cudzysłów przecinek. Linia 25. cudzysłów 1110 cudzysłów dwukropek cudzysłów E cudzysłów przecinek. Linia 26. cudzysłów 1111 cudzysłów dwukropek cudzysłów F cudzysłów przecinek. Linia 27. zamknij nawias klamrowy. Linia 29. for i in range otwórz nawias okrągły 0 przecinek len otwórz nawias okrągły liczba podkreślnik binarna zamknij nawias okrągły przecinek 4 zamknij nawias okrągły dwukropek. Linia 30. bity znak równości liczba podkreślnik binarna otwórz nawias kwadratowy i dwukropek i plus 4 zamknij nawias kwadratowy. Linia 31. liczba podkreślnik szesnastkowa plus znak równości mapowanie otwórz nawias kwadratowy bity zamknij nawias kwadratowy. Linia 33. print otwórz nawias okrągły liczba podkreślnik szesnastkowa zamknij nawias okrągły.

Słownik

dzielenie całkowite
dzielenie całkowite

działanie, w którym dzielimy przez siebie dwie liczby całkowite, wynikiem jest liczba całkowita powstająca z odrzucenia części ułamkowej ilorazu

reszta z dzielenia
reszta z dzielenia

liczba naturalna przechowująca tę część dzielnej, która nie została wydzielona podczas dzielenia całkowitoliczbowego; dzieląc liczbę naturalną m przez liczbę naturalną n, otrzymujemy iloraz całkowity q i resztę r, zachodzi wówczas równość m = nq + r

system binarny
system binarny

(inaczej dwójkowy); pozycyjny system liczbowy o podstawie 2; do zapisu liczb wykorzystywane są dwie cyfry: 0 i 1

system dwójkowy
system dwójkowy

inaczej system binarny

system heksadecymalny
system heksadecymalny

(inaczej szesnastkowy); pozycyjny system liczbowy o podstawie 16; do zapisu liczb wykorzystywane są cyfry 0‑9 oraz litery A‑F