c=(A.method1() << i) | (B.method2() << j) | C.method3();
was beduten die "<<" und "|" im obigen Java-Ausdruck?
danke!
c=(A.method1() << i) | (B.method2() << j) | C.method3();
was beduten die "<<" und "|" im obigen Java-Ausdruck?
danke!
Sind beides bitweise Operatoren.
|...................(logisches) ODER ohne Short-Circuit-Evaluation:
a | b ergibt true, wenn mindestens einer der beiden Ausdrücke a oder b wahr ist. Beide Teilausdrücke werden ausgewertet.
<<..................Linksschieben (Bitshift):
a << b ergibt den Wert, der entsteht, wenn alle Bits von a um b Positionen nach links geschoben werden. Das niederwertigste Bit wird mit 0 aufgefüllt, das höchstwertige Bit (also das Vorzeichen) wird von a übernommen.
Zitat von soadAlles anzeigenSind beides bitweise Operatoren.
|...................(logisches) ODER ohne Short-Circuit-Evaluation:
a | b ergibt true, wenn mindestens einer der beiden Ausdrücke a oder b wahr ist. Beide Teilausdrücke werden ausgewertet.
<<..................Linksschieben (Bitshift):
a << b ergibt den Wert, der entsteht, wenn alle Bits von a um b Positionen nach links geschoben werden. Das niederwertigste Bit wird mit 0 aufgefüllt, das höchstwertige Bit (also das Vorzeichen) wird von a übernommen.
| ist das bitweise ODER, nicht das logische (das wär ||). Beim ODER fällts nicht so auf aber beim UND (& bzw. &&) ist es fatal, die beiden zu verwechseln (01 & 10 == 0; 01 && 10 == 1). Das nur der Vollständigkeit halber.
Beim Linksshift geht das Vorzeichen mehr oder weniger immer verloren; das fällt aber nur auf, wenns bei einem *2 auch zu einem Overflow kommen würde (dank dem Zweierkomplement). Nur beim Rechtsshift gibt es die Unterscheidung zwischen signed (i.e. 1 nachschieben) und unsigned (0 nachschieben).
kleine Korrektur:
Zitat von jeuneS2(01 & 10 == 0; 01 && 10 == 1)
(01 && 10 == 1) währe in Java gar kein gültiger Ausdruck, weil auf der linken und auf der rechten Seite vom && Operator Boolean werte stehen müssen. Und auch das Ergebnis eines Ausdrucks ist immer vom typ Boolean, kann also nicht 1 sein.
Es ist auch nicht Möglich, in Java Binärzahlen zu schreiben, also ist das eher irrelevant...
EDIT: Ok, würde mit Dezimalzahlen auch funktionieren. Aber meistens meint man das doch eher binär, wenn man mit einzelnen Bits herumhantiert.