Warum ist der Bereich der bytes von -128 bis 127 in Java?
Ich verstehe nicht, warum der niedrigste Wert, den ein byte kann, ist -128
. Ich kann sehen, dass der höchste Wert ist 127
, weil es 01111111
im binary, aber wie kann man die darstellen -128
mit nur 8 bits verwendet wird, für das Zeichen? Positiv 128, wäre schon ein 8-bit, d.h. 10000000
, und dann brauchst du ein 9. bit zu repräsentieren, das negative Vorzeichen.
Könnte mir bitte jemand erklären mir das an.
Zweierkomplement
Es ist ähnlich wie bei den anderen integer-Typen
Eine bessere Frage ist
Es ist ähnlich wie bei den anderen integer-Typen
short
, int
und long
.Eine bessere Frage ist
why java byte type is not a range of 0..255
? In der Tat viele Fragen, diese Frage, in den meisten Sprachen byte
Typ ohne Vorzeichen ist, aber in java byte
ist unterzeichnet zu, und ich (und viele andere) glauben, dass es war eine schlechte design, das blieb in Java vom ersten Tag an. Gibt es Probleme, wenn Sie arbeiten, JNI, und glauben Sie mir, wenn Sie etwas nennen byte
Sie wollen 0..255!InformationsquelleAutor Bad Request | 2010-09-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort ist Zweierkomplement.
In kurzen, Java (und den meisten modernen Sprachen) stellen nicht-Ganzzahlen mit Vorzeichen mit signed-magnitude-Darstellung. In anderen Worten, eine 8-bit-integer ist nicht ein Vorzeichen-bit, gefolgt von einer 7-bit unsigned integer.
Statt negative Ganzzahlen dargestellt werden, in einem system, die sogenannte Zweierkomplement, das ermöglicht eine einfachere arithmetische Verarbeitung in hardware, und beseitigt auch die potenzielle Mehrdeutigkeit, positive, null und negative null. Ein Nebeneffekt der Beseitigung der negativen null ist, dass es immer eine zusätzliche negative Zahl am unteren Rand der Palette.
Eine weitere interessante Eigenschaft der zwei Systeme ergänzen ist, dass das erste bit ist effektiv Funktion als Zeichen-Anzeige (D. H. alle zahlen, die beginnend mit dem bit 1 negative), aber die nächsten sieben bits werden nicht interpretiert werden und auf Ihre eigenen als eine vorzeichenlose Zahl, die das Vorzeichen-bit angewendet wird.
Zweierkomplement ist nicht furchtbar kompliziert, aber immer einen ersten guten grip auf, was Zweierkomplement ist und wie und warum es funktioniert, ist wahrscheinlich über den Rahmen eines SO beantworten. Beginnen Sie mit dem Artikel in Wikipedia, oder google den Begriff für mehr Ressourcen.
Zu versuchen, kurz zu Adresse Ihre Anfrage über -128, die grundlegende Idee hinter der Generierung eines zweier-Komplement-Zahl ist, die nicht signierter form der Anzahl, umkehren aller bits und addieren. Also vorzeichenlose 128 10000000. Umgekehrt, es ist 01111111, und das hinzufügen einer bekommt 10000000 wieder. So in ein zwei-Komplement-system, 10000000 ist eindeutig -128 und nicht +128. Zahlen, die größer oder gleich +128 einfach dargestellt werden können 8 bits mit einem zwei-Komplement-system, weil Sie nicht klar und eindeutig mit den Formen der negativen zahlen.
Du hast Recht. Das erste bit ist 1, wenn und nur wenn die Zahl negativ ist. Wenn das erste bit ist 0, die Zahl ist entweder positiv oder null ist.
Ich Wette, Sie könnte die Antwort auf meine Frage unter diesem Beitrag zu: stackoverflow.com/questions/16775169/... ich hoffe das ist nicht allzu straight foreward, aber ich wirklich Wunder und nach ein paar Monaten sporadicially Suche ich noch dont haben eine Ahnung,:~
Whi dieses code byte b1 = 0b10000000; macht compile-Fehler?
InformationsquelleAutor Tyler McHenry
Zweit Ergänzung funktioniert wie folgt;
Einem byte besteht aus 8 bits.
Jedoch, ob die zahlen, die präsentiert wurden, wir würden nicht unterscheiden, ob die resultierende Zahl positiv oder negativ ist. Aus diesem Grund, das bit auf der linken Seite gibt uns diese Informationen. Wenn das bit auf der linken Seite ist
0
, kannst du anfangen, den Wert der anderen bits auf der Oberseite derzero
. Wenn das bit1
, sollten Sie beginnen, hinzufügen auf dem oberen-128
. Weil das bit auf der linken Seite ist zwei, um die macht der sieben.Beispiele;
In diesen Beispielen, wird das bit auf der linken Seite 1 ist, bedeutet dies, dass wir hinzufügen, die Werte der anderen bits auf der Oberseite -128.
Gleichen bits, aber dieses mal, wird das bit auf der linken Seite ist
0
. Das bedeutet, dass wir ab, um auf der Oberseite des0
.Wenn wir ok sind, bis jetzt, die Antwort auf deine Frage,
die kleinste mögliche Zahl
die größte mögliche Zahl
Dass ist der Grund, warum der Bereich zwischen -128 und 127.
InformationsquelleAutor Ad Infinitum
Als James wies darauf hin, in seinem Kommentar, es ist, weil das ist, wie Zweierkomplement funktioniert.
Wenn wir es in anderen Begriffen, die Sie darstellen können 2^8 = 256 Art der Werte. die ist in diesem Fall als 128 negative zahlen, 127 positive zahlen und null. Wenn wir verwendet 7 bits zur Darstellung des Wertes, +1 bit für ein Zeichen, wir repräsentieren könnte man weniger Wert und hätte auch zwei Nullen (das wäre sehr bedauerlich, da der Vergleich zweier Werte, die wäre noch komplizierter, weil, dass).
InformationsquelleAutor Tamás Szelei
Einfachen numerischen Typen darstellen kann 2^n zahlen. Suchen Sie im Fall n=2. Sie repräsentieren vier Fällen, nennen wir Sie a, b, c, d.... Dann können Sie Zustimmen, entweder
a=-2, b=-1, c=0, d=1
(dies angenommen, Weise) odera=-1, b=0, c=1, d=2
(Möglich, aber nicht genutzt). Also, wenn Sie nur eine null, und halten Sie 2^n Staaten Ihreabs(min) != max
Erhöhung dern
verschiebt die Grenzen, aberabs(min) != max
noch hält.InformationsquelleAutor Sic
in java alle Variablen wie byte short int long float double geschrieben werden als signierte .
so ist es sehr einfach, den Kopf immer etwas gibt, was( negativ oder positiv), sondern weil die zahlen sind teilbar durch 2. Hälfte verschoben ist, als negativ , 0 positiv ist, standardmäßig .
also es sieht wie folgt aus :
positiver
+|0001001
1/0001001
dies ist negativ
-|0001001
0/0001001
als byte
kurze negativ
-000000011111111
0000000011111111
InformationsquelleAutor Andrei Bazavan
byte besteht aus 8 bit ---> 1 bit Vorzeichen (positive oder negative ) 7-bit-Wert
also der Bereich -2^7 negativ (-128 ) bis 2^7 -1 positiv(127)
InformationsquelleAutor Mina Fawzy
Ohne ins Zweierkomplement:
2^8 (da ein byte ist 8-stellig und kann aus 1 aus 2 Werten) = 256, so dass die einzelnen Werte, die ein byte darstellen kann, ist 256.
so repräsentieren die zahlen -128 bis -1 ist die Hälfte unseres Sortiments.
Ich glaube die Frage ist hier, warum ist die maximale positive Wert 127 statt 128. Dies ist, weil wir zu vertreten haben, die Zahl 0, so pauschal 0-127 ist die andere 128 Möglichkeiten aus unserem Sortiment.
Wenn wir erlauben, nur positive Werte, wie ein unsigned byte, in denen negative zahlen sind nicht möglich, die Reichweite wäre 0-255, da diese 256 verschiedenen Werte (einschließlich 0).
InformationsquelleAutor David Hollowell - MSFT
nach der Einnahme von zwei s Kompliment der Zahl, die wir immer Links mit einem Stand vertreten-Nummer extra so wenden wir uns diesem Staat zu -128.
InformationsquelleAutor Rashid Ali