JavaRush /Blog Jawa /Random-JV /Casting jinis primitif. Casting int kanggo short lan byte...
Георгий
tingkat
Санкт-Петербург

Casting jinis primitif. Casting int kanggo short lan byte

Diterbitake ing grup
Casting jinis primitif.  Casting int menyang short lan byte - 1Yagene yen sampeyan ngetik sawetara jinis nilai intkanggo ngetik shortutawa byte, asil ora dikarepke? Ayo goleki!
int i = 450;
byte b = (byte)i;
System.out.println(b);
Asil ing layar:

-62
Ora dikarepke, ana panjelasan logis babagan iki, apa maneh, tumindak iki bisa ditindakake kanthi tangan sampeyan dhewe. Kanggo nindakake iki, kita kudu ngowahi 450 saka desimal menyang biner:

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
Ing kolom sisih tengen nomer, kita nulis sisa-sisa nalika dibagi 2, lan ing ngisor nomer kasebut kita nulis asil pamisah nomer loro, yen sisane 0. Yen sisane 1, banjur ing ngisor iki ditulis bagean integer saka divisi dening loro. ( Kalkulator online kanthi panjelasan petungan ). Akibaté, kita entuk ing sistem nomer biner 450 = 11100 0010. Sembarang nomer jinis intmanggoni 4 bita utawa 32 bit, ing ngendi saben bit 0 utawa 1. Ing kasus kita, mung 9 bit sing dikuwasani, lan ing prinsip kita int i = 450ing sistem biner katon kaya iki:

0000_0000_0000_0000_0000_0001_1100_0010
Kita pengin nulis variabel kita dadi variabel jinis byte, nanging nomer jinis bytenjupuk 1 bait (kaya ing ngisor iki saka jeneng jinis iki) utawa 8 bit. Mulane, bit ekstra ing sisih kiwa mung dibuwang, lan ing pungkasan kita entuk:

1100 0010
Jinis sawetara nilai byte: -128 kanggo 127. Saben nomer manggoni 8 bit lan bit paling kiwa saben nomer iku tandha bit. Kanggo kabeh angka positif padha karo 0, kanggo kabeh nomer negatif padha karo 1. Ora perlu cepet-cepet ngowahi asil sing dipikolehi ing ndhuwur menyang sistem kaping 10, amarga kita nampa kode tambahan kanggo nomer sing dikarepake, lan ora langsung. Bit sing paling kiwa padha karo 1, mula nomer kita negatif, lan kanggo nomer negatif kode langsung lan mbalikke ora pas, ora kaya sing positif. Yen bit tandha padha karo 0, mula kita bisa langsung ngonversi nomer kasebut menyang sistem angka desimal lan entuk: 66. Nanging bit tandha negatif, mula kita kudu ngowahi kode tambahan dadi langsung lan nambah minus. tandha kanggo jawaban. Kanggo kajelasan lan latihan, ayo nyoba njaluk kode tambahan saka sawetara nomer, contone -15. Kanggo nindakake iki, ing kode langsung saka perwakilan positif (nomer 15), sampeyan kudu ngganti kabeh 0s kanggo 1s lan kosok balene (njaluk kode mbalikke, uga disebut kuwalik), lan banjur nambah siji kanggo asil. Ing sistem desimal 15 = 0000 1111; Kode mbalikke (ngganti kabeh 0s dadi 1s lan kosok balene) = 1111 0000; Kode tambahan (tambah siji):

1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1
1 1 1 1 0 0 0 1
Kode tambahan kanggo nomer -15: 1111 0001; Apik. Saiki, kanthi analogi karo conto ing ndhuwur, kita kudu ngowahi kode tambahan dadi kode langsung, supaya aku ngelingake sampeyan, padha karo 1100 0010.
  1. Ngurangi siji lan njaluk kode mbalikke. Iku trep kanggo nindakake iki, nulis mudhun kode tambahan ing jawaban lan ndeleng apa sing perlu kanggo nambah siji kanggo njaluk kuwi kode tambahan. Kita miwiti karo digit paling tengen lan katon: apa kita kudu nambah 1 kanggo njaluk 0? Kanggo 1, kita entuk 10, 0 dadi nanggepi, lan 1 menyang digit sabanjure. Sabanjure, apa sing kudu ditambahake menyang 0 kanggo entuk siji. Siji, nanging amarga kita duwe siji saka digit sadurunge, kita nulis 0 kanggo nanggepi. Sabanjure, kanggo entuk 0, apa sing kudu ditambahake menyang 0? Mesthi, 0. Dadi 4 kaping liyane. Lan isih ana 2 digit pungkasan, ing ngendi sampeyan kudu nambah soko 0 kanggo entuk 1. Mesthi, ing kasus loro sampeyan kudu nambah 1. Total:

    
    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. Sisih paling angel wis rampung! Kita wis nampa kode kuwalik (muwalik) lan sing kudu ditindakake yaiku langsung. Kita walik kabeh 0 dadi 1 lan kosok balene:

    1100 0001- kode kuwalik;

    0011 1110 - kode langsung saka nomer kita, utawa rodo perwakilan positif;

  3. Ngonversi menyang sistem angka desimal ( Kalkulator online kanthi panjelasan petungan ):

    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;

    Kabeh sing isih ana yaiku nambah minus menyang nomer lan jawaban kita:-62.

Kanthi cara sing padha, nomer jinis diowahi shortdadi jinis int:
int i = 10_000_000;
short s = (short)i;
System.out.println(s); // -27008
  1. 10.000.000 ing sistem angka 10 = 0000 0000 1001 1000 1001 0110 1000 0000ing sistem angka 2.

    Ing Jawa, nomer jinis intnjupuk 4 bita, lan shortnomer jinis njupuk 2 bita, utawa 16 bit, supaya kita Cut ngiwa kanggo 16 digit:

  2. 1001 0110 1000 0000. Bit paling kiwa (dicokot paling pinunjul, uga dikenal minangka bit tandha) dadi padha karo 1. Iki tegese kita duwe kode tambahan kanggo nomer negatif, supaya kita pindhah menyang titik sabanjuré.
  3. Ayo terjemahake menyang kode mbalikke:

    
    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

    Kode bali: 1001 0110 0111 1111;

  4. Kita walik lan entuk kode langsung: 0110 1001 1000 0000.

  5. Kita ngowahi menyang sistem nomer binar lan entuk perwakilan positif saka nomer kita:

    1∙2^14+1∙2^13+1∙2^11+1∙2^8+1∙2^7 = 16384+8192+2048+256+128 = 27008.
  6. Tambah minus lan entuk jawaban:-27008

Casting jinis primitif.  Casting int menyang short lan byte - 2Link menyang kalkulator online kode maju, mundur lan komplementer. Uga ing situs iki ing sangisore kalkulator ana teori cilik babagan kode invers lan nglengkapi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION