Sprawdź się
Dany jest program przeprowadzający konwersję liczby całkowitej zapisanej w systemie dwójkowym na system szesnastkowy. Blok funkcji głównej jest niekompletny. Dopisz brakujący kod, tak aby program przy użyciu funkcji parseInt() oraz dec2Hex() konwertował podaną liczbę całkowitą z systemu binarnego na system szesnastkowy.
Działanie programu przetestuj dla liczby 101001010Indeks dolny (2)(2).
Jeśli długość liczby przekracza 31 znaków, program powinien wypisać następujący komunikat:
Podaj liczbę binarną, która zawiera mniej bitów.Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Main {
public static String dec2Hex(int liczbaDec) {
if (liczbaDec == 0) {
return "0";
}
String liczbaHex = "";
int reszta = 0;
while (liczbaDec > 0) {
if (liczbaDec % 16 <= 9) {
reszta = liczbaDec % 16;
liczbaHex = reszta + liczbaHex;
} else {
reszta = liczbaDec % 16 - 10 + 'A';
liczbaHex = (char) reszta + liczbaHex;
}
liczbaDec = liczbaDec / 16;
}
return liczbaHex;
}
public static void main(String[] args) {
String liczbaBin = "101001010";
if (liczbaBin.length() < 32) {
int liczbaDec = Integer.parseInt(liczbaBin, 2);
System.out.println(dec2Hex(liczbaDec));
} else {
System.out.println("Podaj liczbę binarną, która zawiera mniej bitów.");
}
}
}Dany jest program przeprowadzający konwersję części ułamkowej liczby zapisanej w systemie dwójkowym na system szesnastkowy. Blok polecenia switch jest jednak niepełny. Dopisz brakujący kod, aby program działał poprawnie, czyli konwertował podaną część ułamkową liczby zapisanej w systemie binarnym na system szesnastkowy.
Działanie programu przetestuj dla części ułamkowej liczby binarnej: 10111Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin – łańcuch znaków; część ułamkowa liczby zapisanej w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; część ułamkowa liczby zapisana w systemie szesnastkowym wypisana z poprzedzającymi znakami „0,” części całkowitej
Przykładowe rozwiązanie zadania:
public class Main {
public static String konwertujUlamek(String liczbaBin) {
String liczbaHex = "";
int dlugosc = liczbaBin.length();
if (dlugosc % 4 != 0) {
int ileBrakuje = 4 - dlugosc % 4;
for (int j = 0; j < ileBrakuje; j++) {
liczbaBin += "0";
}
}
int i = 0;
do {
String bity = "";
for (int j = i; j < i + 4; j++) {
bity = bity + liczbaBin.charAt(j);
}
switch (bity) {
case "0000":
liczbaHex = liczbaHex + "0";
break;
case "0001":
liczbaHex = liczbaHex + "1";
break;
case "0010":
liczbaHex = liczbaHex + "2";
break;
case "0011":
liczbaHex = liczbaHex + "3";
break;
case "0100":
liczbaHex = liczbaHex + "4";
break;
case "0101":
liczbaHex = liczbaHex + "5";
break;
case "0110":
liczbaHex = liczbaHex + "6";
break;
case "0111":
liczbaHex = liczbaHex + "7";
break;
case "1000":
liczbaHex = liczbaHex + "8";
break;
case "1001":
liczbaHex = liczbaHex + "9";
break;
case "1010":
liczbaHex = liczbaHex + "A";
break;
case "1011":
liczbaHex = liczbaHex + "B";
break;
case "1100":
liczbaHex = liczbaHex + "C";
break;
case "1101":
liczbaHex = liczbaHex + "D";
break;
case "1110":
liczbaHex = liczbaHex + "E";
break;
case "1111":
liczbaHex = liczbaHex + "F";
break;
}
i = i + 4;
} while (i < dlugosc);
return liczbaHex;
}
public static void main(String[] args) {
String liczbaBin = "10111";
System.out.println("0," + konwertujUlamek(liczbaBin));
}
}Napisz program przeprowadzający konwersję liczby naturalnej z systemu binarnego na szesnastkowy, wykorzystując bazy skojarzone.
Działanie programu przetestuj dla liczby 1111111111100Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba naturalna zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Bin2Hex {
public static String konwertujLiczbe(String liczbaBin) {
String liczbaHex = "";
int dlugosc = liczbaBin.length();
if (dlugosc % 4 != 0) {
int brakuje = 4 - dlugosc % 4;
for (int j = 0; j < brakuje; j++) {
liczbaBin = "0" + liczbaBin;
}
}
dlugosc = liczbaBin.length();
int i = 0;
do {
String bity = "";
for (int j = i; j < i + 4; j++) {
bity = bity + liczbaBin.charAt(j);
}
switch (bity) {
case "0000":
liczbaHex = liczbaHex + "0";
break;
case "0001":
liczbaHex = liczbaHex + "1";
break;
case "0010":
liczbaHex = liczbaHex + "2";
break;
case "0011":
liczbaHex = liczbaHex + "3";
break;
case "0100":
liczbaHex = liczbaHex + "4";
break;
case "0101":
liczbaHex = liczbaHex + "5";
break;
case "0110":
liczbaHex = liczbaHex + "6";
break;
case "0111":
liczbaHex = liczbaHex + "7";
break;
case "1000":
liczbaHex = liczbaHex + "8";
break;
case "1001":
liczbaHex = liczbaHex + "9";
break;
case "1010":
liczbaHex = liczbaHex + "A";
break;
case "1011":
liczbaHex = liczbaHex + "B";
break;
case "1100":
liczbaHex = liczbaHex + "C";
break;
case "1101":
liczbaHex = liczbaHex + "D";
break;
case "1110":
liczbaHex = liczbaHex + "E";
break;
case "1111":
liczbaHex = liczbaHex + "F";
break;
}
i = i + 4;
} while (i < dlugosc);
return liczbaHex;
}
public static void main(String[] args) {
System.out.println(konwertujLiczbe("1111111111100"));
}
}Wykorzystując podane fragmenty kodu, napisz program, który zrealizuje konwersję liczby stałoprzecinkowej zapisanej w systemie dwójkowym na system szesnastkowy.
Działanie programu przetestuj dla liczby 10110,101101Indeks dolny (2)(2).
Specyfikacja problemu:
Dane:
liczbaBin– łańcuch znaków; liczba zapisana w systemie dwójkowym
Wynik:
liczbaHex– łańcuch znaków; liczba zapisana w systemie szesnastkowym
Przykładowe rozwiązanie zadania:
public class Main {
public static int bin2Dec(String liczbaBin) {
int liczbaDec = Character.getNumericValue(liczbaBin.charAt(0));
for(int i = 1; i < liczbaBin.length(); i++) {
liczbaDec = liczbaDec * 2 + Character.getNumericValue(liczbaBin.charAt(i));
}
return liczbaDec;
}
public static String konwertujCzescCalkowita(String czescCalkowita) {
int czescCalkowitaDec = bin2Dec(czescCalkowita);
String czescCalkowitaHex = "";
int reszta = 0;
while (czescCalkowitaDec > 0) {
if (czescCalkowitaDec % 16 <= 9) {
reszta = czescCalkowitaDec % 16;
czescCalkowitaHex = reszta + czescCalkowitaHex;
} else {
reszta = czescCalkowitaDec % 16 - 10 + 'A';
czescCalkowitaHex = (char) reszta + czescCalkowitaHex;
}
czescCalkowitaDec = czescCalkowitaDec / 16;
}
return czescCalkowitaHex;
}
public static String konwertujCzescUlamkowa(String czescUlamkowa) {
String czescUlamkowaHex = "";
int dlugosc = czescUlamkowa.length();
if (dlugosc % 4 != 0) {
int brakuje = 4 - dlugosc % 4;
for (int j = 0; j < brakuje; j++) {
czescUlamkowa += "0";
}
}
dlugosc = czescUlamkowa.length();
int k = 0;
do {
String bity = "";
for (int j = k; j < k + 4; j++) {
bity = bity + czescUlamkowa.charAt(j);
}
switch (bity) {
case "0000":
czescUlamkowaHex += "0";
break;
case "0001":
czescUlamkowaHex += "1";
break;
case "0010":
czescUlamkowaHex += "2";
break;
case "0011":
czescUlamkowaHex += "3";
break;
case "0100":
czescUlamkowaHex += "4";
break;
case "0101":
czescUlamkowaHex += "5";
break;
case "0110":
czescUlamkowaHex += "6";
break;
case "0111":
czescUlamkowaHex += "7";
break;
case "1000":
czescUlamkowaHex += "8";
break;
case "1001":
czescUlamkowaHex += "9";
break;
case "1010":
czescUlamkowaHex += "A";
break;
case "1011":
czescUlamkowaHex += "B";
break;
case "1100":
czescUlamkowaHex += "C";
break;
case "1101":
czescUlamkowaHex += "D";
break;
case "1110":
czescUlamkowaHex += "E";
break;
case "1111":
czescUlamkowaHex += "F";
break;
}
k = k + 4;
} while (k < dlugosc);
return czescUlamkowaHex;
}
public static String bin2Hex(String liczbaBin) {
int i = 0;
String czescCalkowita = "";
while (liczbaBin.charAt(i) != ',') {
czescCalkowita += liczbaBin.charAt(i);
i++;
}
i++;
String czescUlamkowa = "";
for (int j = i; j < liczbaBin.length(); j++) {
czescUlamkowa += liczbaBin.charAt(j);
}
String czescCalkowitaHex = konwertujCzescCalkowita(czescCalkowita);
String czescUlamkowaHex = konwertujCzescUlamkowa(czescUlamkowa);
return czescCalkowitaHex + "," + czescUlamkowaHex;
}
public static void main(String[] args) {
String liczbaBin = "10110,101101";
System.out.println(bin2Hex(liczbaBin));
}
}