hexadezimal in binär mit Hilfe von Shift-Operatoren

martsen

Mitglied
Hallo liebe Gemeinde,

ich beginne, im Rahmen einer Ausbildung, nun mit Java. Bisher denke ich, dass ich gut mitkomme. Nun habe ich schon die Suchfunktion benutzt - leider habe ich keine Antwort auf explizit diese Fragestellung gefunden.
Folgendes: wir sollen ein hexadezimalen String in binär umzuwandeln. Ich habe es mit else - if Anweisungen gemacht. Nun wurde mir gesagt, dass es auch irgenwdie mit den Shift-Operatoren funktionieren soll. Nur komme ich hierbei überhaupt nicht weiter.
Ich würde freuen, wenn mir jemand eine Möglichkeit aufzeigen könnte.
 
Wenn es keine Vorgabe gibt, würde ich es mit Hilfe der Funktionen der Klasse Integer machen.

Java:
String hex = "ABCD";
System.out.println(hex+" = "+Integer.toBinaryString(Integer.parseInt( hex.trim(), 16)));

Mist, Spoilerknopf funktioniert nicht wie erwartet 🙂

Pentalon
 
Wenn Du mit Shift arbeiten möchtest, musst DU die Zahl zuerst auch in einen int umwandeln:
Java:
zahl = Integer.parseInt( hex.trim(), 16);
Danach kannst Du mit Hilfe einer Maske und einer & Verknüpfung prüfen, ob das jeweilige Bit im int gesetzt ist.
Java:
if((zahl & mask) == mask)
   // Bit ist 1
else
   // Bit ist 0
Danach wird das Bit der Maske um 1 nach rechts oder links verschoben, abhängig davon ob Du unten oder oben beginnst.
Java:
mask = mask >> 1 oder mask = mask << 1;

Pentalon
 
Zuletzt bearbeitet:
Hallo Pentalon und Marcinek,

vielen Dank für eure schnellen Hilfen. Nun weiß ich, wie ich das mit Hilfe der Shift-Operatoren durchführen kann (ich werde mal eine Alternativ-Lösung zu meinen bisherigen "Programm" schreiben).

Danke nochmals 🙂
 
Hier noch die Bitschieber-Variante und die anderen Möglichleiten:

Java:
public class Hex2Bin {

	// Handmade Binary-String
	public static String dec2Bin(int zahl) {
		String bin = "";
		int mask;
		
		if(zahl < 0) bin ="1";			// Bei einer negativen Zahl ist das 32te Bit gesetzt
		else bin = "0";
		
		for(mask=1 << 30;mask!=0;mask=mask>>1) {
			if((zahl & mask) == mask)
				bin = bin+"1";
			else
				bin = bin+"0";
		}
		
		return bin;
	}
	
	
	public static void main(String[] args) {

		String hex = "ABCD";
		
		// Die übersichtliche Variante
		int dec1 = Integer.parseInt( hex.trim(), 16);
		System.out.println("Die String "+hex+" = Dezimal "+dec1);
		System.out.println("Dec "+dec1+" = BIN: "+Integer.toBinaryString(dec1));

		// Der Einzeiler
		System.out.println(hex+" = "+Integer.toBinaryString(Integer.parseInt( hex.trim(), 16)));
		
		System.out.println("Handgemachter Binärstring= "+dec2Bin(dec1));
		System.out.println("Handgemachter Binärstring= "+dec2Bin(-dec1));
	}
}

Pentalon
 
Zuletzt bearbeitet:
folgendes wäre auch noch eine möglichkeit

Java:
String input="...";
StringBuilder stringBuilder=new StringBuilder();
int inputInt=Integer.parseInt(input, 16);
for(int i=31; i>=0; i--)
{
	stringBuilder.append((inputInt>>i)&0x01);
}
String output=stringBuilder.toString();
System.out.println(output);

wobei zu beachten ist das man zwar bis 7FFFFFFF gehen kann ... aber 80000000 als "-80000000" schreiben muss da Integer.parseInt() bei radix 16 bei 80000000 ne exception wirft da dies so nicht mehr in einen INT passt ...
 

Zurück
Oben