2012-06-10 19 views
5

So wie ich reading about ~ war,Warum ist ~ 0 -1?

Führt den NOT-Operator für jedes Bit.

Also habe ich versucht:

0 = 00000000000000000000000000000000 

     so ~0 should be 

~0 = 11111111111111111111111111111111 

Aber als ich versuchte, kehrt sie -1. Ist 11111111111111111111111111111111 nicht 4294967295 in Dezimal?

+1

Duplizieren: http://stackoverflow.com/questions/3141163/why-do-unsigned-int-x-1-and-int-y0-have-the-same-binary-representation – copy

+0

@copy - Es ist in 'C' nicht JavaScript. –

+4

Es ist eine sehr einfache Sache, die für die meisten Programmiersprachen gilt. Lesen Sie http://en.wikipedia.org/wiki/Two%27s_complement oder http://StackOverflow.com/a/3141181/1078067 – copy

Antwort

9

Es wird als eine Ganzzahl mit Vorzeichen interpretiert, und in Zweierkomplement ist eine Ganzzahl mit allen Bits 1 -1.

+0

Also, wenn Sie '4294967295' in binäre verwandeln, dann drehen Sie es zurück in Dezimal, es wird' ' -1'? –

+1

Möglicherweise wert hinzufügen - in Zweierkomplement, alle Bits haben den gleichen Wert sie für einen vorzeichenlosen Wert mit Ausnahme der wichtigsten. Dieses höchstwertige Bit (MSB) hat seinen Wert gegenüber dem gleichen Bit in einem vorzeichenlosen Wert negiert - z. für 32-Bit-Integer ist das MSB -217483648 für Zweierkomplement lieber als +2147483648 für unsigned wert. – Steve314

+1

Das hängt von der verwendeten Sprache und den verwendeten Typen ab, @Derek. Wenn ich mich an das Verhalten von Javascript richtig erinnere, wenn Sie '4294967295' eingeben, wird es als' Zahl' behandelt und intern als 'double' dargestellt, so dass es nicht automatisch zu' -1' wird. Aber wenn Sie Bit-Operationen darauf ausführen, wird es in eine (vorzeichenbehaftete) 32-Bit-Ganzzahl konvertiert, und dann wird das Bitmuster als "-1" interpretiert. –

6

A Bitmusterebene alle 1 s ist 4294967295 für eine ganze Zahl ohne Vorzeichen oder eine vorzeichenbehaftete ganze Zahl mit mehr als 32 Bits . Für eine vorzeichenbehaftete ganze Zahl mit 32-Bit dargestellt als Zweierkomplement sein -1.

7

Nur wenn der Typ unsigniert ist. Ganzzahlige Zeichen mit Vorzeichen verwenden das oberste Bit als Negations-Flag - und wenn Sie es auf 1 setzen, erhalten Sie eine negative Zahl. Siehe Two's Complement.