Thread ~- anstatt -- (10 answers)
Opened by leo11 at 2009-11-30 16:30

MatthiasW
 2009-11-30 17:55
#128775 #128775
User since
2008-01-27
367 Artikel
BenutzerIn
[default_avatar]
Das kommt durch die Abbildung negativer Zahlen zu Stande. Das Zweierkomplement der jeweiligen positiven Ganzzahl ergibt die entsprechende negative. (http://de.wikipedia.org/wiki/Zweierkomplement)

Das Zweierkomplement bildet man, indem man zum Einerkomplement der Zahl noch eins dazuaddiert.

Das Einerkomplement ist die Umkehrung der einzelnen Bits und lässt sich dadurch beschreiben, dass man von der größtmöglichen Zahl, die Zahl, deren Einerkomplement man bilden möchte, abzieht:

$y = 0b0001 (1)
0b1111 - $y => 0b1110 (-2)


Eins dazuaddieren (Zweierkomplement):

0b1110 (-2) + 0b0001 => 0b1111 (-1)

Bildet man von dieser Zahl nun wieder das Einerkomplement, so hat man insgesamt 1 abgezogen, da bei der Bildung des Zweierkomplements ja noch 1 dazuaddiert wurde.

Man kann es also auch als ~((~$y)+1) schreiben:

0b1111 - (0b1111 - $y + 0b0001) =>
Da $y = 0b0001: - $y + 0b0001 = 0
0b1111 - 0b1111 => 0b0000 (0)


Ein Ersatz für --$y ist es nicht, da der Wert der Variablen nicht verändert wird. Und es ist auch kein Ersatz für $y-1, da man bei negativen Zahlen, und der Null, Schwierigkeiten bekommt ;)

MfG
perl -E'*==*",s;;%ENV=~m,..$,,$&+42;e,$==f;$"++for+ab..an;@"=qw,u t,,print+chr;sub f{split}say"@{=} me"'

View full thread ~- anstatt --