Zahl Basis 10 in DualDezimal 16bit umwandeln

BrokeGates

Mitglied
Brauche Hilfe und komme nicht weiter bei folgender Aufgabenstellung:

Übung 2: Mit Arrays (Feldern) arbeiten
Entwickeln Sie ein Programm, das eine positive ganze Zahl zur Basis 10 in eine Dualzahl (Zahl zur Basis 2) mit 16 Bit umrechnet. Das Programm soll mit Hilfe von Kommandozeilenparameter verwendet werden können. Wurde kein Parameter an das Programm übergeben, so muss der Benut-zer nach der gewünschten Zahl gefragt werden. Nur wenn eine zulässige Eingabe erfolgt ist, soll die eigentliche Berechnung durchgeführt werden. Verwenden Sie zur Speicherung der Dualzahl ein Array mit 16 Einträgen. Jeder Eintrag ist eine Zahl mit Wert 0 oder mit Wert 1. Das erste Element des Arrays enthält das hochwertigste Bit der Dualzahl, das letzte Element des Arrays enthält das niederwertigste Bit der Dualzahl. Bitte beachten Sie, dass das Programm nur Zahlen umrechnen soll, die in 16 Bit dar-stellbar sind. Zahlenwerte, die nicht in 16 Bit dargestellt werden können, sollen nicht umgerechnet werden. In diesem Fall gibt das Programm eine Fehlermeldung aus.

mein Ansatz sieht so aus
Java:
import java.util.*;

public class bit16 {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.print("gib ne zahl ein: ");
		int zahlEingabe = (int) sc.nextLong();

		int dualDec[] = { 32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128,       //Erstellen des Arrays
				64, 32, 16, 8, 4, 2, 1 };

		// if (zahlEingabe > 65535) {

		// System.out.println("geht nix");
		// }
		// else {

		int temp = zahlEingabe;														//Erstellen einer Laufvariablen
		int i = 0;
		while (i < 16) {															
			if (temp >= dualDec[i]) {
				System.out.print("1\t");
				temp = temp - dualDec[i];
				i++;
			} else
				System.out.print("0\t");
			i++;
		}
	}
}
 
Zuletzt bearbeitet von einem Moderator:
Ich würde da etwas anders rangehen.

Erstelle eine Prüfmaske und setzt das 15te Bit auf 1.

Java:
int mask = 32768;    // Bit 15 auf 1 sezten
int[] bitArray = new int[16];    // Feld in dem die Bits gesetzt werden

Prüfe ob das entsprechende Bit in der eingegebenen Zahl gesetzt ist:

Java:
for(int i=15;i>=0;i--) {
    if((zahlEingabe & mask) == mask)
        bitArray[i] = 1;
    else
        bitArray[i] = 0;
    mask = mask >> 1;      // Bit um eins nach rechts verschieben
}

Die Prüfung auf eine Zahl grösser 16 Bit hast Du ja schon gemacht (im Kommentar).

Audrucken kannst Du dann das Bitfeld mit:

Java:
System.out.println(Arrays.toString(bitArray));

PS: Ich hab das nur so hingeschrieben, aber eigendlich sollte es funktionieren.
PSS: Habs gerade getestet, beim Ausdruck ist das linke Bit das 0te Bit,
der Ausdruck währe wohl besser so zu machen:

Java:
for(int i=15; i>=0;i--)
    System.out.print(""+bitArray[i]);

Pentalon
 
Zuletzt bearbeitet:
Danke Pentalon hat prima geklappt 😀

wenn du mir jetzt noch verraten kannst für was das programm hier:

Java:
	if ((zahlEingabe & mask) == mask)
				bitArray[i] = 1;
genau macht?
 
Hier wird ein Bitmuster (und das ist eine Zahl letztendlich im Computer) mit einer Maske die ich definiert habe verglichen.

mask hat den dezimalen inhalt 32768

Binär ist das 1000000000000000

das 16te Bit ist auf eins, der rest auf 0.

Wenn Du nun eine Zahl nimmst, z.B. 1000 so ist das binär

0000001111101000 // die Binäre Zahl 1000

Ich mache nun eine AND Verknüpfung mit Zahl und der Maske bei der bit 16 auf 1 steht

0000001111101000 // die Binäre Zahl 1000
1000000000000000 // die Maske
Hier kommt mit & 0 heraus also ist das 16te Bit auf 0

Als nächstes schiebe ich das Bit der makse um 1 nach rechts mask = mask >> 1;

0000001111101000 // die Binäre Zahl 1000
0100000000000000 // die Maske
Der Vergleich ergibt 0. Bit 15 ist 0

Wieder Schieb mask = mask >> 1;
0000001111101000 // die Binäre Zahl 1000
0010000000000000 // die Maske
Der Vergleich ergibt 0. Bit 14 ist 0

Wieder Schieb mask = mask >> 1;
0000001111101000 // die Binäre Zahl 1000
0001000000000000 // die Maske
Der Vergleich ergibt 0. Bit 13 ist 0

Wieder Schieb mask = mask >> 1;
0000001111101000 // die Binäre Zahl 1000
0000100000000000 // die Maske
Der Vergleich ergibt 0. Bit 12 ist 0

Wieder Schieb mask = mask >> 1;
0000001111101000 // die Binäre Zahl 1000
0000010000000000 // die Maske
Der Vergleich ergibt 0. Bit 11 ist 0

Wieder Schieb mask = mask >> 1;
0000001111101000 // die Binäre Zahl 1000
0000001000000000 // die Maske
Der Vergleich ergibt 1. Bit 10 ist 1 <<<<<<<-------- Wir haben ein Bit gefunden !!!!

usw......

Pentalon
 
Hallo zusammen, ich bearbeite gerade genau die Gleiche aufgabe. Dies ist mein Ansatz:

Java:
public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("Bitte Zahl eingeben:");

		int dezZahl = sc.nextInt();
		int[] a = new int[16]; 							// Anzahl der Bits

		
		
		
		if ( dezZahl >= 1 && dezZahl <= 65535)
		{
			System.out.print("Die Binärzahl ist :");
			for (int i = a.length - 1; i >= 0; i--) {	//Zahl wird in das Array eingelesen
				a[i] = dezZahl % 2;
				dezZahl /= 2;
			}
			for (int i = 0; i < a.length; i++)

				System.out.print(a[i]);
		}
			else
			{
				System.out.println("Bitte gültige Zahl eingeben:");
			}
		
		
		
			
		
	}


}

Es klappt soweit auch, ich habe nur das Problem, dass ich nicht so ganz weiss was mit den Kommandozeilenparametern gemeint ist. Laut Aufgabenstellung muss ja eig nur eine Eingabe erfolgen falls die Parameter nicht eingegeben wurden.

Danke schonmal
lg n
 
ich habe nur das Problem, dass ich nicht so ganz weiss was mit den Kommandozeilenparametern gemeint ist.
Dafür ist dieser omninöse Parameter
Code:
String[] args
in der Main Methode. Wenn über Kommandozeile Parameter übergeben wurden, hat dieser String-Array eine Länge größer 0. Einen String in einen int umwandeln geht mittels
Code:
Integer.parseInt(<derString>)
.
Code:
- Aufruf mit Kommandozeilenparameter
java Bit16 10
So landet die "10" an Position 0 des String-Array args.
 
Wie kann ich das jetzt in mein Programm einbauen?


Java:
 int a = Integer.parseInt(args);
		
		{
		    if (args.length() == 0)
		    
		      System.out.println("Keine Dezimalzahl als Kommandozeilenparameter eingegeben, bitte die Zahl auf der Konsole eingeben: ");
		      
		      
		    else if (args.length()>0)
		    	
		    	if ( a>= 1 && a <= 65535)
				
					System.out.print("Die Binärzahl ist :");
					for (int i = a.length - 1; i >= 0; i--) {	
						a[i] = a % 2;
						a /= 2;
				
					for (int i = 0; i < a.length; i++)

						System.out.print(a[i]);
				}
				// usw.

um die Binärzahl auszugeben muss die Dezimalzahl von rechts nach links in das array eingelesen werden, was aber mit einer Eingabe in der Kommandozeile nicht funktioniert, da dies ein string ist?? Also eclipse sagt
The primitive type int of a does not have a field length
 
Du fragst zuerst ab ob Parameter übergeben wurden indem Du mit args.length nachschaust.
Danach kannst Du dann auf das Array args zugreifen (args[0], args[1]...).
Hier ein kleines Demoprogramm, zu experimentieren.

Java:
public class ProgrammParameterTest {

	public static void main(String[] args) {

		if(args.length > 0) {
			System.out.println("Es wurden folgende Parameter übergeben:");
			for(String x:args)
				System.out.println(x);
		} else
			System.out.println("Es wurden keine Parameter übergeben");
	}
}

Die Parameter übergibst Du, falls Du Eclipse verwendest, indem Du im Menü unter Run/Run Configurations... und dort unter Parameters in das Feld die Parameter mit einem Leerzeichen getrennt eingibts (siehe Bild unten).

Sollte es fix nur einen oder 2 Parameter geben, kann man es sich einfach machen und sagen:

Java:
public class ProgrammParameterTest {

	public static void main(String[] args) {

		if(args.length == 1) 
			System.out.println("Der übergebene Parameter lautet: "+args[0]);
		else
			System.out.println("Es wurde nicht die richtige Anzahl an Parametern übergeben");
	}
}

Pentalon
 

Anhänge

  • 22.11.png
    22.11.png
    7,4 KB · Aufrufe: 24
Zuletzt bearbeitet:
Danke euch für die Hilfe, habs hinbekommen. Für die Interressierten : 🙂

Java:
		int dezZahl;
		
		if (args.length < 1)											
//überprüfen ob keine Parameter eingegeben wurden
		{
																		
//falls ja, Eingabe einer Zahl über die Konsole
			Scanner sc = new Scanner(System.in);
			System.out.println("Bitte geben sie eine Zahl ein");
		
		dezZahl = sc.nextInt();
		
		} 
		else
		{
			dezZahl = Integer.parseInt(args[0]);
		}

		int[] a = new int[16];											
                                                                 //anlegen eines Arrays mit 16 Stellen(16Bit)

		if (0 <= dezZahl && dezZahl < 65535) {

			for (int i = a.length - 1; i > 0; i--)
			{															

                              //umrechnung dezimal in binär

				a[i] = dezZahl % 2;
				dezZahl = dezZahl / 2;

			}
			
			for (int k = 0; k < a.length; k++) {
				System.out.print(a[k]);

			}
		} else {
			System.out.println("Die Zahl ist nicht mit 16 Bit darstellbar");

		}

	}
 

Zurück
Oben