# Binärdarstellung in Java mit Shift-Operator + bitweises und



## Metallicum (2. Nov 2008)

Guten Abend zusammen,
hänge nun schon den ganzen Tag an folgender Aufgabe, die uns im Informatikstudium gestellt wurde:

Implementieren Sie ein Programm, das eine Zahl zwischen -128 und 127 in Binärdarstellung ausgibt.
Verwenden Sie hierzu ein Byte, das sie vom Benutzer einlesen (Byte.parseByte(inputString)).
Die einzelnen Stellen sollen durch den Shift-Operator ">>" und bitweises und "&" ausgegeben werden.
Verwenden Sie keine Schleife.


```
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Aufgabe3 {
	public static void main(String[] args) {
		
	    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

	   boolean input = true;

	    do {
		    
		    try 			       		        
		    	{       
			        System.out.println("Geben Sie einen Zahl zwischen -128 und 127 ein:");
			        String s = in.readLine();
			        byte binaer = Byte.parseByte(s);
			        byte out1 = (byte) (binaer >> 7);
			        byte out11 = ? Hier ist es vorbei bei mir
			        byte out2 = (byte) (binaer >> 6);
			        byte out3 = (byte) (binaer >> 5);
			        byte out4 = (byte) (binaer >> 4);
			        byte out5 = (byte) (binaer >> 3);
			        byte out6 = (byte) (binaer >> 2);
			        byte out7 = (byte) (binaer >> 1);
			        System.out.println(out11 + " " + out2 + " " + out3 + " " + out4 + " " + out5 + " " + out6 + " " + out7);
		    
		    catch (Exception e) {
		    	System.out.println("Bitte geben Sie eine Zahl ein.");
		    	input = false;
		    }
		    } while (input == false);
		} 
	}
```

Ich hab die eingegebene Zahl in Byte umgewandelt und dann setzt mein Können wirklich aus.

Das wäre natürlich die einfachste Lösung: System.out.println(Integer.toBinaryString(binaer));
Allerdings hat das nichts mit der Aufgabenstellung zu tun.
Vielleicht hat ja einer die zündende Idee für mich oder sagt mir, dass ich die Aufgabenstellung total falsch verstanden habe.

Grüße


----------



## Landei (2. Nov 2008)

Sieht doch gar nicht so schlecht aus. 
Das Verschieben reicht aber nicht. Angenommen wir wollen von 10100 das dritte Bit "von hinten".
10100 >> 2 verschiebt die Zahl zwei nach rechts, also haben wir jetzt 101.
Nun interessieren uns die Stellen weiter vorn herzlich wenig, also killen wir alles weiter vorn mit einem
101 & 1, was uns 1 für unser Bit liefert.

Am besten hübsch mit Schleifchen:

```
for(int position = 7; position >= 0; position--) {
   System.out.print((binaer >> position) & 1);
}
```


----------



## Metallicum (2. Nov 2008)

Oh wunderbar! Dankeschön!

Werde gleich versuchen, das noch ohne Schleife zu schreiben.

Melde mich dann gleich nochmal 

Schonmal herzlichen Dank!


Anmerkung:
Bekomme ich bei der Vorgehensweise Probleme mit Minuszahlen?


Anmerkung2:
Funktioniert wunderbar!
Nochmals vielen Dank!
Grüße


----------

