Konwersja zwężenie szeregu zmiennoprzecinkową integralną typu T wykonuje dwa etapy:
W pierwszym etapie, ilość zmiennoprzecinkową przekształca się albo do długo , jeśli T jest długi, lub do int, jeśli T jest bajt, krótki, char lub int, w następujący sposób:
Jeśli liczba zmiennoprzecinkowa jest NaN (§ 4.2.3), wynik najpierw krok konw sion jest całkowitoliczbową 0.
W przeciwnym razie, jeżeli liczba zmiennoprzecinkowy nie jest nieskończona wartość zmiennoprzecinkową zaokrągla się liczbą całkowitą V zaokrąglenia kierunku zera stosując IEEE 754 okrągłego toward- tryb zerowy (§ 4.2.3). Następnie są dwa przypadki:
Jeżeli T jest długa i to liczba całkowita może być przedstawiony jako długi, to wynik pierwszego etapu jest długi wartość V.
W przeciwnym razie, jeżeli liczba całkowita wartość ta może być przedstawiona jako int następnie wynikiem pierwszego etapu int wartość V.
przeciwnym przypadku, jeden z dwóch następujących przypadkach muszą być spełnione:
wartość powinna być zbyt mała (a wartość ujemna dużej wielkości lub ujemna nieskończoność), a wynikiem pierwszego kroku jest najmniejsza reprezentowalna wartość typu int lub long.
wartość powinna być zbyt duża (wartość dodatnia dużej wielkości lub dodatniej nieskończoności), a wynik pierwszego etapu jest największa zakodowania wartości typu całkowitoliczbowej.
W drugim kroku:
Jeżeli T jest całkowitoliczbową wynik konwersji jest wynikiem pierwszym etapie.
Jeżeli T jest bajt char lub zwarcie wynik konwersji jest wynikiem konwersji zwężającym się do typu T (§5.1.3) w wyniku pierwszym etapie.
Zakładam, że rzutuje na 'int', a następnie na' bajt' Uwaga: Integer.MAX_VALUE jest najbliższą wartości Infinity dla 'int'. –
Thx Peter, ale rzucanie Integer.MAX_VALUE na "long" dałoby nam tylko "2147483647L", mam rację? –
@PeterLawrey Czy nie byłoby możliwe, aby '(1.0/0)' było ocenione jako 'podwójne', a następnie kasta do bajtu rozważa dolne 8 bitów? Podczas gdy IEEE 754 definiuje standard dla 'double' i' float', uważam za dziwne, że bit znaku wynosi 0 dla 'int', ponieważ dokumenty nie definiują specyfikacji nieskończoności dla' int'. –