Die ersten 8 Bits von short

Billie

Erfahrenes Mitglied
Hellas!

Eine kleine Frage, ich habe ein short mit folgenden binären Wert:

Code:
10011001 00000011

Im Grunde stecken in diesem short zwei Werte: 153 und 3. Ich konnte 3 schon extrahieren in eine andere short-Variable:

Code:
        m |= (v << 8);
        m >>>= 8;

Aber mit 153 klappt es einfach nicht - ein unsigned right shift wandelt mir meine short-Variable in einen int um und füllt 1en auf ... 0 wäre ja OK. Das Ziel ist eine short-Variable mit dem Wert 153.

Ich hoffe es kann mir jemand mit dem richtigen Ansatz helfen!

Beste Grüße,
Billie
 
Hallo,

deine Werte passen leider nicht mehr in einen Short... das meint zumindest Short.valueOf("....",2);

schau mal hier:
Java:
package de.tutorials;

public class BitValueExtractionExample {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		//00000011
		int i = Integer.valueOf("1001100100000011",2);
		System.out.println(Integer.toBinaryString(i));
		
		int upperBits = i >> 8 ;
		int lowerBits = i & 0xFF;
		
		System.out.println(upperBits);
		System.out.println(lowerBits);
		
	}

}

Ausgabe:
Code:
1001100100000011
153
3

Gruß Tom
 
Immer bei den Shift Operatoren dran denken, dass die "Pfeile" in die Richtung zeigen in die verschoben wird. Und du willst die letzten 8 Bit nach rechts rausschieben. Daher >> 8 wie von Thomas gezeigt.
 
Hellas!

Also rein vom Platz her passt alles in einen short. Und meine Überlegung bzgl. dem Shift war ja auch, die linken 8 Bits nach Rechts zu verschieben und links 0 aufzufüllen. Aber da kommt dann folgendes raus:

Java:
        short s = -26365;
        System.out.println("s=" + toBinaryString(s) + " (" + s + ")");
        System.out.println("s=" + toBinaryString(s >>> 8));

Code:
s=1001100100000011 (-26365)

Ich denke ich muss für die ganze Binär-Operation wirklich auf int Umsteigen, obwohl es prinzipiell eigentlich unnötig ist. Ich habe zB auch das Prinzip hinter 0xFF verstanden:

Java:
        short s = -26365;
        short f = 0xFF;
        short m = 0;
        System.out.println("f=" + toBinaryString(f));
        m = (short) (f & s);
        System.out.println("m=" + toBinaryString(m));

Code:
f=0000000011111111
m=0000000000000011

Aber ich muss zB die logische UND-Verknüpfung von f und s wieder auf short casten, obwohl eigentlich beide 16 Bits groß sind.
 
Zuletzt bearbeitet von einem Moderator:

Neue Beiträge

Zurück