2016-03-29 3 views
-1

Führen Sie die folgenden in python3python3: ~ 2 = -0b11?

>>> print(2, bin(2), ~2, bin(~2)) 
> 2 0b10 -3 -0b11 

Ich dachte ~20b01 oder 0b101 sein sollte.

Warum -0b11?

Antwort

2
2 = 00000010 
~2 = 11111101 

Was ist der Wert 11111101 im Zweierkomplement?

Um das zu beantworten, folgen Sie diesem einfachen Algorithmus:

  • Flip alle Bits
  • 1 zum Ergebnis hinzufügen
  • Bestimmen Sie die Zeichen nach dem MSB

11111101 > 00000010 > 00000011 
     ^  ^
     Flip  Add 1 

Beachten Sie, dass das höchstwertige Bit "1" ist, also das Zeichen ist negativ.

1

Erste lookat ~ 2:

2 = 0b0000...10 (n leading 0s) 
~2 = 0b1111...01 (n leading 1s) 

Analyse Dann -0b11

die meisten Computer-Zahlendarstellung der Zweierkomplementnotation verwendet, wobei gilt:

A - B = A + ~B + 1 

So -0b11 acturally ist:

- 0b11 
= 0 - 0b11 
= 0b0000...00 + 0b1111...00 + 1 
= 0b1111...01 
+0

über '0x111 ... 01', meinst du' 0b111 ... 01'? – Xin

+0

@Xin schöner Fang –