bitreihenfolge umdrehen

hamster1989

Mitglied
was kann ich machen wenn
Java:
while (x != 0) {   
             if  (x%2 == 0) IO.print("0");   
                        else IO.print("1");
             x = x / 2;  }


ich mit dem Algorithmus die Bitreihenfolge einer Zahl Dezi --> Dual falschherum generiere um die umzudrehen?
 
Zuletzt bearbeitet:
G

Gast2

Gast
Java:
		public static void main(final String[] args) {
			int[] arr = new int[]{1, 2, 3, 4};
			print(arr);
			printBackwards(arr);
		}

		private static void print(final int[] arr) {
			String result = "";
			for (int i : arr) {
				result += i + " ";
			}
			System.out.println(result);
		}

		private static void printBackwards(final int[] arr) {
			String result = "";
			for (int i : arr) {
				result = i + " " + result;
			}
			System.out.println(result);
		}
Das Prinzip dahinter ist klar oder?
 

Tobse

Top Contributor
Was der code praktisch macht ist die bits falshherum auszugeben. Was du (z.B) machen kannst ist:
Java:
StringBuilder sb=new StringBuilder();
while (x != 0) {   
             if  (x%2 == 0) sb.append('0');
                        else sb.append('1');
             x = x / 2; 
}
int new=Integer.parseInt(sb.toString(), 2);
 

hamster1989

Mitglied
eigentlich nicht ich bin programmieranfänger und ich kenne fast keins von den roten bzw. blauen wörtern in dem code bzw. ich darf die nicht verwenden
 
G

Gast2

Gast
Du sollst auch nicht den Code von da oben übernehmen sondern das Prinzip dahinter verstehen.
Alles was du brauchst ist nen zusätzlicher String, siehe Lösung von Tobse.
 

Tobse

Top Contributor
Wenn du den StringBuilder nicht verwenden darfst, dann versuchs mit bit-shifting:
Java:
byte a=10; // 00001010
// Die bits um 1 nach links verschieben
byte b=a << 1; // 00010100
// Die bits um 2 nach links verschieben
b=a << 2; // 01010000
// Die bits um 3 nach rechts verschieben
b=b >> 3; // 00001010
// Jetzt gilt: b=a
 
Zuletzt bearbeitet:

Camill

Bekanntes Mitglied
Wenn du den StringBuilder nicht verwenden darfst, dann versuchs mit bit-shifting:
Java:
byte a=10; // 00001010
// Die bits um 1 nach links verschieben
byte b=a << 1; // 00010100
// Die bits um 2 nach links verschieben
b=a << 2; // 01010000
// Die bits um 3 nach rechts verschieben
b=b >> 3; // 00001010
// Jetzt gilt: b=a

Da haben sich wohl Denkfehler eingeschlichen ;)
 

Tobse

Top Contributor
Da haben sich wohl Denkfehler eingeschlichen ;)
Wo?
Java:
System.out.println(1 << 1); // Ergibt "2"
danke für die Antworten, aber ich befürchte deine Methode darf ich auch nicht verwenden
Doch, mit sicherheit. Du sollst eine bitreihenfolge umkehren, also gehe ich auch davon aus, dass es dir erlaubt ist, die bits zu verändern. Wäre sonst n dicker knoten im Kopf deines Lehrers für mich.
 

Camill

Bekanntes Mitglied
Wo?
Java:
System.out.println(1 << 1); // Ergibt "2"

Zeile 5: 'a'(00001010) wird erneut um 2 nach links verschoben - Ergebnis wäre somit 00101000
Zeile 7: 'b'(00010100) wird um 3 nach rechts geschoben - ergibt einen Unterlauf
Außerdem sollte 'b' vom Typ int sein oder man müsste Casten.
 
Zuletzt bearbeitet:

langhaar!

Bekanntes Mitglied
Doch, mit sicherheit. Du sollst eine bitreihenfolge umkehren, also gehe ich auch davon aus, dass es dir erlaubt ist, die bits zu verändern.

So sicher wäre ich mir da nicht. Ich kann mir gut vorstellen, dass die Aufagbe nicht darin besteht, eine vorhandene Bitfolge umzudrehen, sondern den Algorithmus so anzupassen, dass er von vorneherein die Ziffern in der richtigen Reihenfolge ausgibt.

@hamster1989

Versuch mal, den Algorithmus so umzustellen, dass er mit dem höchsten Bit beginnt.
Das ist ein bisschen kniffeliger, aber mit den dir erlaubten Mitteln zu schaffen.
 

Oben