DezimalZuBinär - Erklärung der Vorgehensweise des Programms

Airgin

Mitglied
Hallo liebe Mitforennutzer,

ich bin im ersten Semester und uns wurde folgende Klasse aufgezeigt.
Diese sollen wir nun versuchen zu verstehen (was passiert in den jeweiligen Schritten) und
falls möglich verbessern.
Ich wäre schon sehr dankbar für eine detaillierte Erklärung zu den Geschehnissen der Schritte.
Da ich wirklich noch Anfänger bin, würde ich mich über simple Erklärungen freuen 😳

Vielen Dank im Vorraus.

Hier der Code:
Java:
import javax.swing.*;

public class DezToBin {
	public static void main(String[] args) {
		long dezimalzahl;

		String eingabe = JOptionPane.showInputDialog("Zahl eingeben!");
		dezimalzahl = Integer.parseInt(eingabe);

		System.out.print("Die groesste 1-Bit-Gruppe von " + dezimalzahl
				+ " (Binaer:");
		doDeztobin(dezimalzahl);
		System.out.print(") hat " + groupSize(dezimalzahl) + " Bit(s)\n\n");
	}

	static void doDeztobin(long z) {			// long z = long dezimahlzahl 
		long b = 1;

		if (z == 0) {
			System.out.print("0");
		return;									// return, damit nicht weiter gelaufen wird in der Methode (wie "break" bei switch)
		}

		while (b <= z)
			b <<= 1;							// <<= 	"Zuweisung mit Linksverschiebung"   b = << 1??

		b >>= 1;								// >>= 	"Zuweisung mit Rechtsverschiebung"   b = >> 1??
		System.out.println(b);
		
		while (b != 0) {
			if ((z & b) != 0)
				System.out.print("1");
			else
				System.out.print("0");
			b >>= 1;
		}
	}

	static int groupSize(long z) {
		long b = 1;
		int max = 0, akt = 0;

		while (b <= z) {
			if ((z & b) != 0) {
				akt++;
			} else {
				if (akt > max)
					max = akt;
				akt = 0;
			}
			b <<= 1;
		}

		if (akt > max)
			max = akt;

		return (max);
	} 

}
 
Zuletzt bearbeitet:
Sinnvoller wäre das ganze, wenn du es mal selbst analysieren würdest und uns dann deine Ergebnisse mitteilst und wir dir dann sagen, was daran richtig oder eben falsch ist und dich ggf verbessern 😉
Sonst hat das ganze nämlich wenig Nutzen für dich
 
Ok, ich grenze mal die Bereiche ein, die ich nicht verstehe:

[Java]System.out.print("Die groesste 1-Bit-Gruppe von " + dezimalzahl
+ " (Binaer:");
doDeztobin(dezimalzahl);
System.out.print(") hat " + groupSize(dezimalzahl) + " Bit(s)\n\n");[Java]


[Java]System.out.print("0");
return; // return, damit nicht weiter gelaufen wird in der Methode (wie "break" bei switch)
}

while (b <= z)
b <<= 1; // <<= "Zuweisung mit Linksverschiebung" b = << 1??

b >>= 1; // >>= "Zuweisung mit Rechtsverschiebung" b = >> 1??
System.out.println(b);

while (b != 0) {
if ((z & b) != 0)
System.out.print("1");
else
System.out.print("0");
b >>= 1;
}
}[Java]

Überhaupt verstehe ich diese Zuweisungen mit Verschiebungen nicht.
und was bei System.out.print passiert
und wie es sein kann dass ich bei einer void methode ein return einbringen kann
 
Ok, ich grenze mal die Bereiche ein, die ich nicht verstehe:

[Java]System.out.print("Die groesste 1-Bit-Gruppe von " + dezimalzahl
+ " (Binaer:");
doDeztobin(dezimalzahl);
System.out.print(") hat " + groupSize(dezimalzahl) + " Bit(s)\n\n");[Java]


[Java]System.out.print("0");
return; // return, damit nicht weiter gelaufen wird in der Methode (wie "break" bei switch)
}

while (b <= z)
b <<= 1; // <<= "Zuweisung mit Linksverschiebung" b = << 1??

b >>= 1; // >>= "Zuweisung mit Rechtsverschiebung" b = >> 1??
System.out.println(b);

while (b != 0) {
if ((z & b) != 0)
System.out.print("1");
else
System.out.print("0");
b >>= 1;
}
}[/Java]

Überhaupt verstehe ich diese Zuweisungen mit Verschiebungen nicht.
und was bei System.out.print passiert
und wie es sein kann dass ich bei einer void methode ein return einbringen kann

Nun ja, eine Verschiebung um 1 verschiebt - wie der Name schon sagt - alle Bits um 1. Das ist gleichbedeutend mit mal / durch 2. z.B.
[c]5 << 2 ist das selbe wie (5 * 2) * 2 = 20[/c] da:
[c]0b101 << 2 = 0b10100 = 20[/c]
In die andere Richtung entspricht das einer Division mit Abrundung:
[c]11 >> 1 ist das selbe wie (int) (11 / 2) = 5[/c] da:
[c]0b1011 >> 1 = 0b101 = 5[/c]
Merke, dass das letzte Bit einfach weg fällt - Es macht keinen Unterschied, ob die Zahl 2n oder 2n + 1 ist, das Ergebnis ist das Gleiche (für n element IN)

System.out.print(...); Gibt einfach nur einen String auf der Konsole aus, ohne in die nächste Zeile zu springen. Vergleichbar mit:
String konsolentext = "...";
konsolentext = konsolentext + "Anhang";

"Return" heißt ja nur "Komm wieder zurück" - Da muss nicht zwingend ein Wert dabei sein. Void heißt nur, dass man keine Rückgabe erwartet, im Gegensatz zu:
[c]return 1;[/c]
[c]return Math.max(x * x, y * y);[/c]
einfach nur:
[c]return; // <- Keine Rückgabe, nur der Aufruf, die Methode zu beenden.[/c]
 

Neue Themen


Zurück
Oben