Wie kommen diese Ausgaben zustande?

maxmuster987

Aktives Mitglied
Java:
public class Uebung {
    public static void main(String[] args) {
        byte d=5, h=0xB, k=010;
        System.out.println(d&h);
        System.out.println(h|k);
        System.out.println(d<<4);
        System.out.println(h>>>2);
    }
}


Wenn ich diesen Code durchlaufen lasse, dann erhalte ich als Ausgabe:
1
11
80
2

Wie kommt das bitte zustande? Ich verstehe die Operatoren noch nicht so wirklich. Also eigentlich schon, nur hier in dem Fall gar nicht.

Die Zahlenwerte im Dezimalsystem lauten:
d=5
h=11
k=8
 
d=101
h=1011
k=1000

Nach Wikipedia müsste ja dann sein:
&:
Das bitweise UND wird auf zwei Bitfolgen gleicher Länge angewendet und gibt eine Bitfolge derselben Länge zurück, indem es jeweils Bits an der gleichen Stelle (jeweils das erste Bit, jeweils das zweite Bit usw.) mit einem logischen UND (logische Konjunktion) verknüpft. Bei jedem Paar ist das Ergebnisbit 1, falls beide Bits 1 sind, ansonsten 0.
d&h = 101&1011 = 1010 -> 10

|:
Das bitweise ODER wird auf zwei Bitfolgen gleicher Länge angewendet und gibt eine Bitfolge derselben Länge zurück, indem es jeweils Bits an der gleichen Stelle mit einem logischen ODER (logische Disjunktion) verknüpft. Bei jedem Paar ist das Ergebnisbit 0, falls beide Bits 0 sind, ansonsten ist das Ergebnisbit 1.
h|k = 1011|1000 = 0100 -> 4
  • „<<“ (in einigen Sprachen „shl“) Verschieben nach links, um den jeweils dahinter angegebenen Wert
  • „>>“ (in einigen Sprachen „shr“) Verschieben nach rechts, um den jeweils dahinter angegebenen Wert
d<<4 = 101<<4 = 1010000 -> 80
h>>>>2 = 1011>>>>2 = 0010 -> 2

Das kann ja nicht stimmen, wenn ich mir die Ausgabe anschaue.
Also zumindest die oberen beiden Zeilen nicht. Die unteren passen jetzt und das habe ich nachvollziehen können.
 
Du musst natürlich gleichwertigen Stellen verknüpfen… also erst die einer dann die zweier, vierer, Achter, …. (Also von rechts nach links)

Oder einfach links mit 0er auffüllen.
 
Ahaaa, ich hab vergessen, dass ich ja die beliebig viele Nullen noch davor setzen darf, um das zu vergleichen. Darauf habe ich nicht geachtet. Danke dir!
Ja, okay. In der zweite Zeile habe ich Müll fabriziert, ich seh's gerade auch.

h|k = 1011|1000 = 1011 -> 11
 
Nein, ich denke, dass Du da noch immer etwas falsch machst. Gehen wir einfach einmal alles durch:
d=0101
h=1011
k=1000

d & h = 0101 & 1011 = 0001

da
a, b, a&b
0, 0, 0
0, 1, 0
1, 0, 0
1, 1, 1

h | k = 1011 | 1000 = 1011

da
a, b, a|b
0, 0, 0
0, 1, 1
1, 0, 1
1, 1, 1

Die Verschiebungen sind soweit richtig - da bist Du ja auch auf die richtigen Ergebnisse gekommen.
 
Es ist aber k = 2! Das spielt nur bei h | k keine Rolle.
k ist aber doch 8

Die 2 war das Ergebnis von h >>> 2

Oder habe ich da jetzt den ersten Post falsch gelesen:

Wenn ich diesen Code durchlaufen lasse, dann erhalte ich als Ausgabe:
1
11
80
2

Wie kommt das bitte zustande? Ich verstehe die Operatoren noch nicht so wirklich. Also eigentlich schon, nur hier in dem Fall gar nicht.

Die Zahlenwerte im Dezimalsystem lauten:
d=5
h=11
k=8
 

Neue Themen


Zurück
Oben