Datum: 10. Juli 2009 Autor: Frank Dreßler, frank.dressler@rub.de Wissenswertes zum Zweierkomplement und der Invertierung von Bitketten ===================================================================== <><><><><><><><><><><><><><><><><><><><> <> Voraussetzung: -x = ~x + 1 V1 <> <> <=> ~x = -(x + 1) V2 <> <>------------------------------------<> <> Wissenswerte Zusammenhänge: <> <> 1. -~x = x + 1 <> <> 2. ~-x = x - 1 <> <> 3. ~(x + y) = ~x + ~y + 1 <> <> 4. x - y = ~y - ~x <> <><><><><><><><><><><><><><><><><><><><> Anmerkung zur Voraussetzung: Die Voraussetzung bedeutet nur, dass negative Zahlen wie -x als das Zweierkomplement von x dargestellt werden. Dies ist bei allen mir bekannten Rechnern und Sprachen der Fall. Die Ausdrücke funktionieren daher auch in vielen Sprachen, beispielsweise C(++), Javascript, Java, Perl, ... Beweise: 1. -~x =(V1)= 1 + ~(~x) = x + 1 2. Variante 1: -~~-x = --x = x Variante 2: ~-x = ~(1 + ~x) =(3)= ~1 + ~(~x) + 1 = -2+1+x = x - 1 Variante 3: -~x = x + 1 <=> ~x = -x - 1 (x mit -x ersetzen) <=> ~-x = x - 1 3. ~(a+b) =(V2)= -(a+b+1) = -a -b -1 =(V1)= ~a+1 + ~b+1 - 1 = ~a + ~b + 1 4. a - b = a - b + 1 - 1 = a+1 - (b+1) =(1)= -~a - -~b = -~a + ~b = ~b - ~a Beispiele: zu 1: -~3 ist 4 zu 2: ~-3 ist 2 zu 1: -~-~-~-~-~-~-~-~-~-~0 ist 10 zu 3: ~10 ist ~0 + ~10 + 1 ist ~1 + ~9 + 1 ist ~5 + ~5 + 1 zu 4: 21 - 7 = 24 - 10