Una conversione restringimento di un numero a virgola mobile a un tipo integrale T richiede due fasi:
Nella prima fase, il numero in virgola mobile è convertita in un lungo , se T è long o to int, se T è byte, short, char o int, come segue:
Se il numero in virgola mobile è NaN (§4.2.3), il risultato del primo passo della conversione sione è un int lungo 0.
Altrimenti, se il numero a virgola mobile non è un infinito, il valore a virgola mobile viene arrotondato a un valore intero V, arrotondando verso zero usando IEEE 754 round-toward- modalità zero (§4.2.3). Poi vi sono due casi:
Se T è lunga, e questo valore intero può essere rappresentato come un lungo, allora il risultato della prima fase è la lunga valore V.
Altrimenti, se questo numero intero valore può essere rappresentato come un int, quindi il risultato della prima fase è il valore int V.
Altrimenti, uno dei due casi seguenti deve essere vera:
il valore deve essere troppo piccola (a valore negativo di grande magnitudine o infinito negativo) e il risultato del primo passo è il più piccolo valore rappresentabile di di tipo int o long.
Il valore deve essere troppo grande (un valore positivo di grandi dimensioni o infinito positivo), e il risultato della prima fase è la più grande valore rappresentabile di int long.
Nella seconda fase:
Se T è int o lunga, il risultato della conversione è il risultato della prima fase .
Se T è byte, char, o corto, il risultato della conversione è il risultato di una conversione restringimento al tipo T (§5.1.3) del risultato della primo passo.
Suppongo che stia eseguendo il casting su un 'int' e poi su un' byte' Nota: Integer.MAX_VALUE è il valore più vicino a Infinity per un 'int'. –
Thx Peter, ma trasmettere Integer.MAX_VALUE a "long" ci darebbe solo "2147483647L", ho ragione? –
@PeterLawrey Non sarebbe possibile che '(1.0/0)' sia valutato come 'double', e quindi la casta in byte considera gli 8 bit inferiori? Mentre IEEE 754 definisce lo standard per 'double' e' float', trovo strano che il bit di segno sia 0 per 'int' poiché i documenti non definiscono le specifiche di infinity per' int'. –