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

unterschied zwischen & und && und bedeutung von ~

  • rizzi
  • 29. Mai 2007 um 17:43
  • Unerledigt
  • rizzi
    3
    rizzi
    Mitglied
    Punkte
    60
    Beiträge
    9
    • 29. Mai 2007 um 17:43
    • #1

    hallo,
    ich habe in einem in java implementierten rot13 verschlüsselungsalgorithmus die verwendung von & und ~ gesehen und wollte euch fragen ob ihr wissts wann man das verwendet.

    auszug aus dem code:

    PHP
    while((abyte = System.in.read())>=0){
    
          int cap = abyte & 32;
          abyte &= ~cap;
          abyte = ((abyte >= 'A') && (abyte <= 'Z') ? ((abyte - 'A' + 13) % 26 + 'A') : abyte) | cap;
          System.out.print(String.valueOf((char)abyte));
        }

    vielen dank für eure hilfe!

  • Paulchen
    1
    Paulchen
    Gast
    • 29. Mai 2007 um 18:07
    • #2

    Naja, &&, ||, ^^, ! sind boole'sche Operatoren, die nehmen ein bzw. zwei Argumente (in Java müssen die, soviel ich weiß, vom Typ bool sein, in C können das beliebige Zahlen sein, wobei 0 für logisch falsch und alles andere für logisch wahr steht) und liefern als Ergebnis wahr oder falsch (True und False in java, 0 und 1 in C).

    &, |, ^ und ~ sind bitweise Operatoren. Betrachtet werden die einzelnen Bits des/der Operanden:

    10 & 11 = 10, 10 & 10 = 10, ...
    10 | 11 = 11, 10 | 10 = 10, ...
    10 | 11 = 01, 10 | 10 = 00, ...
    ~10 = 01
    ~11 = 00

    Wobei das alles Zahlen in Binärdarstellung sind. Beim Komplement ist dann noch zu beachten, dass natürlich alle Stellen, die im Operanden 0 sind, im Ergebnis auf 1 gesetzt werden (also auch die führenden Nullen).

  • zwutschkerl
    6
    zwutschkerl
    Mitglied
    Punkte
    365
    Beiträge
    71
    • 29. Mai 2007 um 18:09
    • #3

    & ist ein bitweises und ->

    Code
    10110
    & 10010 
    ---------
      10010

    ~ ist das einerkomplement

    Code
    ~01011 == 10100
  • zwutschkerl
    6
    zwutschkerl
    Mitglied
    Punkte
    365
    Beiträge
    71
    • 29. Mai 2007 um 18:09
    • #4

    paulchen war schneller

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 29. Mai 2007 um 18:12
    • #5

    & und | können auch in boolschen Ausdrücken verwendet werden. Der Unterschied zwischen && und & ist, dass & immer beide Operanden betrachtet, während && nur den ersten anschaut, falls sich dadurch das Endergebnis bereits eindeutig ermitteln lässt (nämlich wenn der 1. falsch ist, dann wird der 2. gar nicht mehr angeschaut). Das nennt man Kurzschlussoperator und ist dann wichtig, wenn die Auswertung des Ausdrucks Seiteneffekte hat. Analoges gilt für | und ||.

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 29. Mai 2007 um 19:47
    • #6
    Zitat von Christoph R.

    & und | können auch in boolschen Ausdrücken verwendet werden. Der Unterschied zwischen && und & ist, dass & immer beide Operanden betrachtet, während && nur den ersten anschaut, falls sich dadurch das Endergebnis bereits eindeutig ermitteln lässt (nämlich wenn der 1. falsch ist, dann wird der 2. gar nicht mehr angeschaut). Das nennt man Kurzschlussoperator und ist dann wichtig, wenn die Auswertung des Ausdrucks Seiteneffekte hat. Analoges gilt für | und ||.

    Wobei - zumindest in C - & und && nicht immer das gleiche Ergebnis liefern: 0x10 & 0x01 == 0 <=> false; 0x10 && 0x01 <=> true && true == true

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

  • Kampi
    27
    Kampi
    Mitglied
    Reaktionen
    193
    Punkte
    7.828
    Beiträge
    1.468
    • 29. Mai 2007 um 19:58
    • #7
    Zitat von Paulchen

    ....in C können das beliebige Zahlen sein, wobei 0 für logisch falsch und 1 für logisch wahr steht)

    um ganz genau zu sein ist '0' "false", alles andere "true". zumindest der gcc siehts so.

    Willfähriges Mitglied des Fefe-Zeitbinder-Botnets und der Open Source Tea Party.

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 29. Mai 2007 um 20:01
    • #8
    Zitat von jeuneS2

    Wobei - zumindest in C - & und && nicht immer das gleiche Ergebnis liefern: 0x10 & 0x01 == 0 <=> false; 0x10 && 0x01 <=> true && true == true

    Ja, in C. Das ist auch klar, weil da & die bitweise Verknüpfung ist und jeder beliebige Integerwert auch als boolscher Wert interpretiert werden kann, nachdem false einfach als 0 und true als != 0 (bei Verwendung der Konstanten true ist es -1) interpretiert wird. 0x10 & 0x01 ergibt somit false.

    Java erkennt aber ob es sich um boolsche Ausdrücke handelt und wählt zwischen dem bitweisen und dem boolschen Operator. 0x10 & 0x01 in einer Bedingung müsste in Java wenn ich mich jetzt nicht irre zu einem Compilerfehler führen weil es kein boolscher Ausdruck ist.

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 29. Mai 2007 um 20:32
    • #9

    @true in C: im C99-Standard ist festgelegt, dass "true" zu "1" expandiert.

    @Compilerfehler in Java: Ja, der Compiler wirft einen Fehler. Meine Anmerkung war auch so gedacht, dass es hier eben einen erheblichen Unterschied zwischen C und Java gibt, den man im Auge behalten sollte, wenn man zwischen den Sprachen wechselt.

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

  • Christoph R.
    16
    Christoph R.
    Mitglied
    Reaktionen
    36
    Punkte
    2.626
    Beiträge
    428
    • 29. Mai 2007 um 20:35
    • #10
    Zitat von jeuneS2

    @true in C: im C99-Standard ist festgelegt, dass "true" zu "1" expandiert.

    Echt? Ok, dann ist das mit -1 wohl eine andere Programmiersprache. Visual Basic könnte es sein. ...hmmm, ist aber eigentlich auch vollkommen egal.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 30. Mai 2007 um 04:37
    • #11
    Zitat von jeuneS2

    @true in C: im C99-Standard ist festgelegt, dass "true" zu "1" expandiert.


    Umgekehrt ist aber auch festgelegt, daß in Bedingungen von if, while etc. jeder Wert außer 0 als wahr angesehen wird. Ich glaub, das war das, was Kampi wohl gemeint hat.

    *plantsch*

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 30. Mai 2007 um 12:52
    • #12

    Natürlich. Ich habe mich auf das Posting von Christoph R. bzw. das Makro "true" bezogen, wie es in <stdbool.h> definiert wird. Überall sonst im Standard ist nur von "nonzero" oder "unequal 0" die Rede.

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

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    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