2009-11-05 5 views

Antwort

1

Da Java (und die meisten Sprachen) mit two's-complement math negativen Integer-Werte darstellen. Im Zweierkomplement repräsentiert 0xFF (11111111) (in einem vorzeichenbehafteten int) den Wert -1.

17

Bytes sind in Java signiert. In binär 0x00 ist 0, 0x01 ist 1 und so weiter, aber alle 1s (dh 0xFF) ist -1, 0xFE ist -2 und so weiter. Siehe Two's complement, das ist der verwendete Binärcodierungsmechanismus.

+2

Und Java macht Zeichenerweiterung, wenn das Byte zu einem int erweitert wird. http://en.wikipedia.org/wiki/Two%27s_complement#Sign_extension – shf301

+0

eigentlich Zeichen-Erweiterung ist der richtige Grund –

13
  1. b zu einem int bei der Bestimmung der Überladung von system.out.println gefördert wird zu nennen.

  2. Alle Bytes in Java sind signiert. Das vorzeichenbehaftete Byte 0xff repräsentiert den Wert -1. Dies liegt daran, dass Java two's complement verwendet, um vorzeichenbehaftete Werte darzustellen. Das vorzeichenbehaftete Byte 0xff repräsentiert -1, da sein höchstwertiges Bit 1 ist (daher stellt es einen negativen Wert dar) und sein Wert ist -128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = -1.

-1

Es ist nicht nur Java, das 2-s-Komplement math. So kann jeder Mikroprozessor und jeder DSP, an den ich denken kann, Mathe machen. So, wie jede Programmiersprache es darstellt.

+2

Streng gesagt, einige Sprachen (z. B. C und C++) nicht angeben, welche Darstellung für Ganzzahlen verwendet wird. Es ist plattformspezifisch. Auf der anderen Seite spezifiziert Java * * die Zweierkomplementdarstellung. –

5

vielleicht kommt Ihre Verwirrung aus warum (byte)0xFF ist irgendwie gleich (int)0xFFFFFFFF. Was hier passiert, ist die Heraufstufung von kleineren zu größeren Typen mit Vorzeichen, wobei der kleinere Wert Vorzeichen erweitert ist, wobei das höchstwertige Bit in alle neuen Bits des hochgestuften Werts kopiert wird. ein vorzeichenloser Typ wird nicht vorzeichenerweitert, sie werden null erweitert, die neuen Bits sind immer Null.

Wenn es Ihnen hilft, es zu schlucken, denken Sie daran, jede Integer jeder Größe hat auch einige 'Phantom'-Bits, die zu bedeutend sind, um dargestellt zu werden. Sie sind dort, nur nicht in der Variablen gespeichert. eine negative Zahl hat diese Bits ungleich Null, und positive Zahlen haben alle Nullen für Phantom-Bits, wenn Sie einen kleineren Wert zu einem größeren Wert heraufstufen, diese Phantom-Bits werden zu echten Bits.

-1

reduziert Modulo

Byte = 256 0xff = 255

255/256 -> Rest 255

So 255 - 256 = -1

einfache Logik Prost

Verwandte Themen