1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

semantik/java

    • Frage
  • rubinow
  • 16. November 2004 um 14:27
  • Unerledigt
  • rubinow
    2
    rubinow
    Mitglied
    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
    7
    soad
    Mitglied
    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
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    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).

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • a9bejo
    21
    a9bejo
    Mitglied
    Reaktionen
    42
    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.

    lg, Benjamin Ferrari, bookworm.at

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    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.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung