JavaRush /Java-Blog /Random-DE /Umwandeln primitiver Typen. Int in Short und Byte umwande...
Георгий
Level 22
Санкт-Петербург

Umwandeln primitiver Typen. Int in Short und Byte umwandeln

Veröffentlicht in der Gruppe Random-DE
Umwandeln primitiver Typen.  Int in Short und Byte umwandeln - 1Warum sind die Ergebnisse unerwartet, wenn Sie einige Typwerte intin Typ shortoder umwandeln? byteLass es uns herausfinden!
int i = 450;
byte b = (byte)i;
System.out.println(b);
Ergebnis auf dem Bildschirm:

-62
Unerwarteterweise gibt es dafür eine logische Erklärung; außerdem kann diese Aktion mit Ihren eigenen Händen durchgeführt werden. Dazu müssen wir 450 von der Dezimalzahl in die Binärzahl umwandeln:

450/2.    0
225/2.    1
112/2.    0
56/2.     0
28/2.     0
14/2.     0
7/2.      1
3/2.      1
1/2.      1
In die rechte Spalte der Zahl schreiben wir den Rest, wenn sie durch 2 geteilt wird, und unter die Zahl selbst schreiben wir das Ergebnis der Division unserer Zahl durch zwei, wenn der Rest 0 ist. Wenn der Rest 1 ist, dann schreiben wir unten ganzzahliger Teil aus der Division durch zwei. ( Online-Rechner mit Erklärung der Berechnungen ). Als Ergebnis erhalten wir im binären Zahlensystem 450 = 11100 0010. Jede Art von Zahl intbelegt 4 Bytes oder 32 Bits, wobei jedes Bit 0 oder 1 ist. In unserem Fall sind nur 9 Bits belegt, und im Prinzip int i = 450sieht unser Binärsystem so aus:

0000_0000_0000_0000_0000_0001_1100_0010
Wir möchten unsere Variable in eine Variable vom Typ schreiben byte, aber die Typnummer bytebenötigt 1 Byte (wie aus dem Namen dieses Typs hervorgeht) oder 8 Bit. Daher werden die zusätzlichen Bits auf der linken Seite einfach verworfen und am Ende erhalten wir:

1100 0010
Typwertbereich byte: -128 bis 127. Jede Zahl belegt 8 Bits und das Bit ganz links jeder Zahl ist das Vorzeichenbit. Für alle positiven Zahlen ist es gleich 0, für alle negativen Zahlen ist es gleich 1. Es besteht kein Grund zur Eile, unser oben erhaltenes Ergebnis in das 10. System umzurechnen, denn Wir haben einen zusätzlichen Code für die gewünschte Nummer erhalten und keinen direkten. Es stellte sich heraus, dass das Bit ganz links gleich 1 war, daher ist unsere Zahl negativ, und bei negativen Zahlen stimmen die direkten und umgekehrten Codes im Gegensatz zu positiven nicht überein. Wenn das Vorzeichenbit gleich 0 wäre, könnten wir die Zahl sofort in das dezimale Zahlensystem umwandeln und erhalten: 66. Aber das Vorzeichenbit ist negativ, also müssen wir zuerst den zusätzlichen Code in einen direkten umwandeln und ein Minus hinzufügen unterschreiben Sie die Antwort. Zur Verdeutlichung und zum Training versuchen wir zunächst, den zusätzlichen Code einer Zahl abzurufen, zum Beispiel -15. Dazu müssen Sie im direkten Code seiner positiven Darstellung (Nummer 15) alle Nullen in Einsen ändern und umgekehrt (erhalten Sie den umgekehrten Code, auch Invers genannt) und fügen Sie dann eins zum Ergebnis hinzu. Im Dezimalsystem 15 = 0000 1111; Code umkehren (alle Nullen in Einsen ändern und umgekehrt) = 1111 0000; Zusätzlicher Code (einen hinzufügen):

1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1
1 1 1 1 0 0 0 1
Zusatzcode für die Zahl -15: 1111 0001; Großartig. Analog zum obigen Beispiel müssen wir nun unseren zusätzlichen Code in direkten Code umwandeln. Ich möchte Sie daran erinnern, dass er gleich ist 1100 0010.
  1. Subtrahieren Sie eins und erhalten Sie den umgekehrten Code. Es ist praktisch, dies zu tun, indem Sie in der Antwort einen zusätzlichen Code aufschreiben und sehen, was Sie hinzufügen müssen, um einen solchen zusätzlichen Code zu erhalten. Wir beginnen mit der Ziffer ganz rechts und schauen: Wozu müssen wir 1 addieren, um 0 zu erhalten? Auf 1 bekommen wir 10, 0 geht als Antwort und 1 geht zur nächsten Ziffer. Als nächstes muss der Wert zu 0 addiert werden, um eins zu erhalten. Eins, aber da wir eine Eins aus der vorherigen Ziffer haben, schreiben wir als Antwort 0. Um 0 zu erhalten, was sollten wir als nächstes zu 0 hinzufügen? Natürlich 0. Also noch 4 Mal. Und es sind noch die letzten beiden Ziffern übrig, bei denen Sie etwas zu 0 hinzufügen müssen, um 1 zu erhalten. In beiden Fällen müssen Sie natürlich 1 hinzufügen. Gesamt:

    
    1 1 0 0 0 0 0 1
    0 0 0 0 0 0 0 1
    1 1 0 0 0 0 1 0
  2. Der schwierigste Teil ist vorbei! Wir haben den inversen (umgekehrten) Code erhalten und müssen nur noch den direkten erhalten. Wir invertieren alle 0 in 1 und umgekehrt:

    1100 0001- inverser Code;

    0011 1110 - der direkte Code unserer Nummer bzw. ihre positive Darstellung;

  3. In das dezimale Zahlensystem umrechnen ( Online-Rechner mit Rechenerklärung ):

    0011 1110 = 0∙2^7+0∙2^6+1∙2^5+1∙2^4+1∙2^3+1∙2^2+1∙2^1+0∙2^0 = 0+0+32+16+8+4+2+0 = 62;

    Es bleibt nur noch, der Zahl ein Minus hinzuzufügen und unsere Antwort:-62.

Auf die gleiche Weise werden Zahlen vom Typ shortin Typ umgewandelt int:
int i = 10_000_000;
short s = (short)i;
System.out.println(s); // -27008
  1. 10.000.000 im 10. Zahlensystem = 0000 0000 1001 1000 1001 0110 1000 0000im 2. Zahlensystem.

    In Java benötigt eine Typnummer int4 Bytes und eine Typnummer short2 Bytes oder 16 Bits, daher schneiden wir die linke Seite auf 16 Ziffern ab:

  2. 1001 0110 1000 0000. Es stellte sich heraus, dass das Bit ganz links (das höchstwertige Bit, auch Vorzeichenbit genannt) gleich 1 war. Das bedeutet, dass wir einen zusätzlichen Code für eine negative Zahl haben, also gehen wir zum nächsten Punkt über.
  3. Lassen Sie es uns in umgekehrten Code übersetzen:

    
    1 0 0 1 0 1 1 0 0 1 1 1 1 1 1 1
    0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
    1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0

    Rückgabe Code: 1001 0110 0111 1111;

  4. Wir invertieren und erhalten den direkten Code: 0110 1001 1000 0000.

  5. Wir konvertieren in das binäre Zahlensystem und erhalten eine positive Darstellung unserer Zahl:

    1∙2^14+1∙2^13+1∙2^11+1∙2^8+1∙2^7 = 16384+8192+2048+256+128 = 27008.
  6. Fügen Sie ein Minus hinzu und erhalten Sie die Antwort:-27008

Umwandeln primitiver Typen.  Umwandlung von int in short und byte - 2Link zu einem Online-Rechner für Vorwärts-, Rückwärts- und Komplementärcodes. Außerdem gibt es auf dieser Seite unter dem Rechner eine kleine Theorie zum Umkehr- und Komplementcode.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION