сужающее преобразование из числа с плавающей точкой к интегральному типу T принимает два шага:
На первом шаге, число с плавающей точкой преобразуется либо в долго , если T является длинным или int, если T является байтом, коротким, char или int, следующим образом:
Если число с плавающей запятой является NaN (п. 4.2.3), результат первый шаг конверсии Sion является INT или длинным 0.
В противном случае, если число с плавающей точкой не является бесконечность, значение с плавающей точкой округляется до целого значения V, округление в стороне нуля, используя IEEE 754 круглого toward- нулевой режим (п. 4.2.3). Тогда есть два случая:
Если T имеет длину, и это целое значение может быть представлено в виде длинной, то результатом первого шага является длительное значение В.
В противном случае, если это целое число, значение может быть представлена как Int, то результата первого шага этого значения INT В.
в противном случае, один из следующих двух случаев должны быть истинная:
значение должно быть слишком мало (а отрицательное значение большой величины или отрицательная бесконечность), а результатом первого шага является наименьшее представимое значение типа int или long.
Значение должно быть слишком большим (положительное значение большой величины или положительной бесконечности), и в результате первой стадии является самым большим представима значение типа Int или долго.
На втором этапе:
Если Т INT или длинный, то результат преобразования является результатом первого шага.
Если Т байт, символ, или короткое замыкание, результатом преобразования является результат сужающего преобразования к типу T (§5.1.3) результата первый шаг.
Я предполагаю, что он отличает 'int', а затем' byte'. Примечание: Integer.MAX_VALUE является самым близким значением для Infinity для 'int'. –
Thx Peter, но приведение Integer.MAX_VALUE к 'long' даст нам всего лишь «2147483647L», я прав? –
@PeterLawrey Невозможно было бы оценить '(1.0/0)' как 'double', а затем касту в байте считать нижние 8 бит? В то время как IEEE 754 определяет стандарт для 'double' и' float', я считаю нечетным, что бит знака равен 0 для 'int', поскольку документы не определяют спецификации бесконечности для' int'. –