Bitweise Negation?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Bitweise Negation?

    Hi,
    wie funktioniert das genau mit der bitweisen Negation?

    Kann mir z.B. jemand das Ergebnis von folgender Operation erklären:

    ~8 = -9

    Ich seh da:
    ~1000 = 0111 = 7

    Das Minus kann ich mir ja noch vorstellen, bei einer 32-bit Zahl, ist das erste Bit für das Vorzeichen. Was aber passiert dann mit den ganzen Null-Bits dazwischen, wenn ich es mit der 8 mal genau nehme:

    8 = 00000000000000000000000000001000

    Hier steh ich auch dem Schlauch...

    1000 Dank :-)

  • #2
    PHP-Code:
    <?php

    $a 
    45;
    $b = ~$a// bitweises negieren
    $c $a * (-1); // zweierkomplement mit mul erzeugen
    $d = ~$a +// zweierkomplement mit neg erzeugen

    echo '<pre>';
    printf("%032b\n",$a);
    printf("%032b\n",$b);
    printf("%032b\n",$c);
    printf("%032b\n",$d);
    echo 
    '</pre>';

    ?>
    Die Negierung invertiert alle Bits, dabei wechselt das Vorzeichen.... (natürlich)

    Um einen reinen Vorzeichenwechsel zu erzwingen, die Zahl mit -1 multiplizieren
    oder negieren und dann +1
    Zuletzt geändert von combie; 26.06.2006, 16:04.
    Wir werden alle sterben

    Kommentar


    • #3
      negation ist was anderes als vorzeichen änderung.
      es werden einfach alle bits umgeschaltet von 0 auf1 und von 1 auf 0

      ....000001000=8
      ....111110111 nach der negation

      die negative zahlen sind ein wenig anderes als du denkst aufgebaut, da
      -1
      biner
      mit allen 1 belegt ist und ist dadurch quasi nicht nur negiert, sondern auch
      rechts verschoben.
      am bestens kannst du es so testen:
      echo decbin(8)."<br>";
      echo decbin(~8)."<br>";
      echo decbin(-9)."<br>";
      echo decbin(-1)."<br>";
      echo decbin(-2)."<br>";
      dann siehst du auch, dass
      z.b.s
      -2
      nicht wie du es erwartet hast
      ..1111101
      sondern
      ..1111110
      ist
      Slava
      bituniverse.com

      Kommentar


      • #4
        Wieso gibt dann
        echo ~8;
        den Wert -9 aus?

        Kommentar


        • #5
          Weils so ist!!!!!
          Du bildest das Einerkomplement!!
          Erwartest aber das Zweierkomlement

          Siehe: http://de.wikipedia.org/wiki/Zweierkomplement
          Zuletzt geändert von combie; 26.06.2006, 16:12.
          Wir werden alle sterben

          Kommentar


          • #6
            Wie können denn die Zahlen -9 und 4294967287 die gleiche Binärdarstllung haben, ich hätte 4294967287 eher als Ergebnis von ~9 erwartet...

            D.h. mir fehlt noch etwas die Logik ;-)

            Kommentar

            Lädt...
            X