1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

semantik/java

    • Frage
  • rubinow
  • 16. November 2004 um 14:27
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • rubinow
    Punkte
    20
    Beiträge
    2
    • 16. November 2004 um 14:27
    • #1

    c=(A.method1() << i) | (B.method2() << j) | C.method3();

    was beduten die "<<" und "|" im obigen Java-Ausdruck?
    danke!

  • soad
    Punkte
    520
    Beiträge
    88
    • 16. November 2004 um 15:42
    • #2

    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.

  • jeuneS2
    Punkte
    1.227
    Beiträge
    238
    • 16. November 2004 um 15:57
    • #3
    Zitat von soad

    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.

    Alles anzeigen

    | 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).

  • a9bejo
    Punkte
    4.697
    Beiträge
    913
    • 17. November 2004 um 10:18
    • #4

    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.

  • Ringding
    Punkte
    1.237
    Beiträge
    244
    • 17. November 2004 um 15:35
    • #5

    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.

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum