# bitreihenfolge umdrehen



## hamster1989 (8. Nov 2011)

was kann ich machen wenn   

```
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?


----------



## Gast2 (8. Nov 2011)

andersrum ausgeben?


----------



## hamster1989 (8. Nov 2011)

die Theorie versteh ich, aber wie sieht das praktisch aus?


----------



## Gast2 (8. Nov 2011)

```
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 (8. Nov 2011)

Was der code praktisch macht ist die bits falshherum auszugeben. Was du (z.B) machen kannst ist:

```
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 (8. Nov 2011)

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


----------



## Gast2 (8. Nov 2011)

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 (8. Nov 2011)

Wenn du den StringBuilder nicht verwenden darfst, dann versuchs mit bit-shifting:

```
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
```


----------



## hamster1989 (8. Nov 2011)

danke für die Antworten, aber ich befürchte deine Methode darf ich auch nicht verwenden


----------



## Camill (8. Nov 2011)

Tobse hat gesagt.:


> Wenn du den StringBuilder nicht verwenden darfst, dann versuchs mit bit-shifting:
> 
> ```
> byte a=10; // 00001010
> ...



Da haben sich wohl Denkfehler eingeschlichen


----------



## Tobse (8. Nov 2011)

Camill hat gesagt.:


> Da haben sich wohl Denkfehler eingeschlichen


Wo?

```
System.out.println(1 << 1); // Ergibt "2"
```



hamster1989 hat gesagt.:


> 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 (8. Nov 2011)

Tobse hat gesagt.:


> Wo?
> 
> ```
> 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.


----------



## langhaar! (8. Nov 2011)

Tobse hat gesagt.:


> 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.


----------



## Andi_CH (9. Nov 2011)

hamster1989 hat gesagt.:


> danke für die Antworten, aber ich befürchte deine Methode darf ich auch nicht verwenden



Ketzterische Frage: Darfst du Java verwenden?
Wie wärs mit einer Liste der Befehle die du verwenden darfst?

Sonst sind wir nämlich einmal mehr bei der Glaskugelmagie :bahnhof:


----------

