2016-05-17 9 views
0

Ich habe ein Problem beim Versuch, die bitweisen Werte eines Java-Byte-Typs zu finden. Wenn ich versuche, den Wert einer bestimmten Anzahl von Bits mit dem bitweisen Operator & zu erhalten, ist dieser Wert nicht so, wie ich es vorhergesehen habe. Der (sehr einfach) Code ist wie folgt:Problem beim Herausfinden von Bit-Werten aus dem Byte in Java

public class Demo 
{ 
    public static void main(String[]arg) 
    { 
     byte demo = 127; 
     System.out.println("demo is: "+(demo & 00000011)); 
    } 
} 

In diesem Fall erwarte ich ein 3 zu erhalten (da das, was ich erwarte, ist 01111111 und 00000011 = 00000011), aber ich erhalte ein 9 (00001001). Wenn ich es mit 00000111 mache, dann ist das Ergebnis 73 (01001001) statt 7. Warum werden zwei Nullen in den Vergleich eingeführt?

Ich habe die Antworten, die auf andere Fragen gegeben wurden überprüft, aber sie funktionieren nicht in meinem Fall, oder sind nicht genau das gleiche, was ich anfordere. Ich bin mir sicher, dass es eine Kleinigkeit geben muss, aber ich kann nicht herausfinden, wie.

Vielen Dank im Voraus

+1

00000011 ist ein Oktal wörtlichen, Wert 8 + 1 = 9. –

+0

Danke Patricia, es funktioniert jetzt. Ich habe bemerkt, dass wenn ich die Zahl als ein Byte (zum Beispiel 3 statt 00000011) hinzufüge, es auch funktioniert. – Jesus

Antwort

3

Wie Patricia bereits darauf hingewiesen: Java Zahlen interpretiert als Oktalwerte mit führenden Nullen starteing.

Wenn Sie wollen, dass die Zahl binär ist, markieren Sie es mit einem führenden „0b“:

System.out.println("demo is: "+(demo & 0b00000011)); 
+1

Vielen Dank für Ihre Antworten! Es funktioniert jetzt gut. Ich habe bemerkt, dass wenn ich die Zahl als ein Byte (zum Beispiel 3 statt 00000011) hinzufüge, es auch funktioniert. – Jesus

1

Sie können Bit-Operatoren auf int-Werte direkt tun (Java wird die binäre Umwandlung tun)

public static void main(String[] args) throws ParseException { 
     int demo = 127; 
     System.out.println(demo); 
     System.out.println("demo is: " + (demo & 3)); 
    } 

Referenz: http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

oder Sie können Ihre Oktalwert binäre Darstellung als konvertieren:

00000011 
to 
0b00000011 

, die bereits in oben Antwort darauf ist