Java casting: miért ezt az értéket adja? (kérdés kód alatt)
Van a következő kód:
public static void main(String[] args) {
double a = 30000000000000d;
int d = (int) a;
short e = (short) a;
char f = (char) a;
byte g = (byte) a;
System.out.println("d= " +d );
System.out.println("e= " +e );
System.out.println("f= " +f );
System.out.println("g= " +g);
}
}
___
És az eredmény:
d= 2147483647
e= -1
f= (kérdőjelet jelez itt)
g= -1
__
Kérdésem hogy ezek az eredmények hogyan jönnek ki, mert manuálisan számolva nekem más eredmények adódnak:
--> mivel a 30000000000000 érték binary-ban ( [link] 110110100100011101011010101111110000000000000,
ezért a casting után az
- integer értéke az utolsó 32 bit:
11101011010101111110000000000000
(ami decimal-lá konvertálva [link] --> 3948404736)
- short és char értéke az utolsó 16 bit:
1110000000000000
(ami decimal-lá konvertálva 57344)
- byte értéke az utolsó 8 bit:
00000000
(ami decimal-lá konvertálva 0)
Miért nem egyeznek ezek az IDE által kiadott értékkel?
Köszönöm előre is a segítséget, és elnézést ha a kérdés amatőr, de nem találtam leírást ami ennél tovább segítene.
Nem tudom javaban hogy vannak konverziók, de double adatot nem simán binárisan tárolunk, hanem valamilyen lebegőpontos tárolási módszerrel, pl "IEEE 64bit base2".
A többi típusnál meg nem vetted figyelembe, hogy előjelesek.
Az f azért kérdőjel, mert ott is van egy számérték, ha továbbcast-olod, akkor látszik, de az unicode táblában azon az értéken olyan "speciális" karakter van, amit a mezei konzol nem tud megjeleníteni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!