Die Antwort ist die Ergänzung von zwei .
Kurz gesagt, Java (und die meisten modernen Sprachen) stellen keine vorzeichenbehafteten Ganzzahlen dar, die eine Darstellung mit vorzeichenbehafteter Größe verwenden. Mit anderen Worten, eine 8-Bit-Ganzzahl ist kein Vorzeichenbit, gefolgt von einer vorzeichenlosen 7-Bit-Ganzzahl.
Stattdessen werden negative Ganzzahlen in einem System dargestellt, das als Zweierkomplement bezeichnet wird. Dies ermöglicht eine einfachere arithmetische Verarbeitung in der Hardware und beseitigt auch die potenzielle Mehrdeutigkeit einer positiven Null und einer negativen Null. Ein Nebeneffekt der Eliminierung einer negativen Null besteht darin, dass am unteren Rand des Bereichs immer eine zusätzliche negative Zahl verfügbar ist.
Eine weitere interessante Eigenschaft von Zweierkomplementsystemen besteht darin, dass das erste Bit effektiv als Vorzeichenindikator fungiert (dh alle Zahlen, die mit Bit 1 beginnen, sind negativ), die nächsten sieben Bits jedoch nicht allein als vorzeichenlose Zahl für zu interpretieren sind welches das Vorzeichenbit angewendet wird.
Das Komplement von Two ist nicht sonderlich kompliziert, aber einen ersten guten Überblick darüber zu bekommen, was das Komplement von Two ist und wie und warum es funktioniert, würde wahrscheinlich den Rahmen einer SO-Antwort sprengen. Beginnen Sie mit dem Wikipedia-Artikel oder googeln Sie den Begriff für weitere Ressourcen.
Um zu versuchen, Ihre Anfrage zu -128 kurz zu beantworten, besteht die Grundidee beim Generieren einer Zweierkomplementzahl darin, die vorzeichenlose Form der Zahl anzunehmen, alle Bits zu invertieren und eins hinzuzufügen. 128 ohne Vorzeichen ist also 10000000. Invertiert ist es 01111111, und wenn Sie eins hinzufügen, erhalten Sie wieder 10000000. In einem Zweierkomplementsystem ist 10000000 eindeutig -128 und nicht +128. Zahlen größer oder gleich +128 können mit einem Zweierkomplementsystem einfach nicht in 8 Bits dargestellt werden, da sie mit den Formen negativer Zahlen nicht eindeutig wären.