I_P_R_W14_M08_Java Konwersja liczb z systemu dziesiętnego na dwójkowy w języku Java
Konwertowanie liczb
Zanim napiszemy program przekształcający liczby dziesiętne do postaci w systemie dwójkowym (binarnym), przypomnimy algorytm konwersji.
Posłużymy się przykładem. Chcemy zapisać liczbę w systemie dwójkowym:
Używając długopisu i kartki, rozwiązalibyśmy zadanie w następujący sposób:

Zaczynamy od podzielenia liczby 26 przez 2 (czyli podstawę systemu binarnego). Zapisujemy resztę z dzielenia i otrzymany iloraz, który ponownie dzielimy przez 2. Wynikiem jest kolejna reszta i iloraz; resztę znowu zapisujemy, a iloraz dzielimy przez 2. Postępujemy tak aż do momentu, w którym iloraz wyniesie 0. Zapamiętane reszty z dzielenia, odczytane od ostatniej (najnowszej) do pierwszej, składają się na zapis liczby w postaci dwójkowej.
Przełóżmy opisane wyżej operacje na listę czynności:
Dzielimy liczbę przez 2.
Zapisujemy iloraz całkowity oraz resztę.
Przyjmujemy iloraz całkowity za nową liczbę i wracamy do punktu 1. Czynności z punktów 1. i 2. powtarzamy do momentu, w którym iloraz wyniesie zero.
Zapisujemy reszty z dzielenia otrzymane na kolejnych etapach w kolejności od ostatniej (najnowszej) do pierwszej (obliczonej podczas pierwszej operacji dzielenia). Tak uszeregowane cyfry 1 oraz 0 składają się na dwójkową postać konwertowanej liczby.
Rozwiązaniem przykładowego zadania jest zatem:
Możemy przystąpić do napisania programu, w którym wykorzystamy opisany algorytm.
Realizacja algorytmu konwersji w języku Java
Chcemy napisać program, który odczyta podaną przez użytkownika całkowitą liczbę dziesiętną, przekształci ją do postaci dwójkowej, a następnie wypisze rezultat. Algorytm konwersji zrealizujemy w postaci osobnej funkcji, aby program był bardziej czytelny.
Zacznijmy od napisania tej części kodu, dzięki której użytkownik poda liczbę przeznaczoną do konwersji. Wykorzystamy w tym celu klasę Scanner oraz strumień wejścia (System.in):
Zmienna liczbaTest przechowa liczbę wpisaną przez użytkownika za pomocą klawiatury.
Przejdźmy do zdefiniowania funkcji decBin(), odpowiadającej za proces konwersji:
Funkcja zwróci wartość typu String, ponieważ wynikowa liczba w systemie binarnym będzie powstawać dzięki zapisywaniu kolejnych reszt z dzielenia (symboli 0 lub 1) od strony prawej do lewej (zapis zaczynamy od końca, czyli od bitu najmłodszego, a kończymy na najstarszym). Funkcja będzie miała jeden parametr, liczbę całkowitą liczbaDec. W momencie wywołania funkcji parametr przyjmie wartość argumentu – liczby dziesiętnej podanej przez użytkownika przeznaczonej do konwersji.
W ciele funkcji deklarujemy dwie zmienne: łańcuch znaków i liczbę (String wynik oraz int reszta). Pierwsza przechowuje wynik końcowy, czyli postać dwójkową liczby dziesiętnej. Zmiennej reszta będą przypisywane wartości kolejnych reszt z dzielenia przekształcanej liczby przez 2. Odpowiednią instrukcję zapisaliśmy w linii numer 7 (reszta = liczbaDec % 2). Operator % (modulo) służy do obliczania reszty z dzielenia.
Do zmiennej wynik dopisujemy („doklejamy”) kolejne reszty z dzielenia. Używamy przy tym operatora dodawania (+). Możemy tak postąpić, ponieważ zapisujemy rezultat przekształceń jako ciąg znaków (String), a nie liczbę. Zwróć jednak uwagę na kolejność działań. To do zmiennej reszta dopisujemy zmienną wynik, a nie odwrotnie. Jest to ważne, ponieważ rezultatem przekształceń są kolejne reszty zapisywane od strony prawej do lewej. Gdybyśmy odwrócili kolejność dodawania, to w przypadku konwertowania liczby otrzymalibyśmy błędny wynik zamiast poprawnego ciągu .
Oto końcowa wersja kodu:
W linii 21. wywołujemy funkcję decBin() i od razu podajemy wynik jej działania.