Как долго работает int cast в Java?
Этот вопрос не о том, как long должен быть правильно приведен к int, а о том, что происходит, когда мы неверно приводим long к int.
Так что рассмотрите этот код -
@Test
public void longTest()
{
long longNumber = Long.MAX_VALUE;
int intNumber = (int)longNumber; // potentially unsafe cast.
System.out.println("longNumber = "+longNumber);
System.out.println("intNumber = "+intNumber);
}
Это дает вывод -
longNumber = 9223372036854775807
intNumber = -1
Теперь предположим, что я внес следующее изменение:
long longNumber = Long.MAX_VALUE - 50;
Затем я получаю вывод -
longNumber = 9223372036854775757
intNumber = -51
Вопрос в том, как значение long конвертируется в int?
1 ответ
Решение
Младшие 32 бита long
взяты и помещены в int
,
Вот математика, хотя:
- Относиться негативно
long
значения как2^64
плюс это значение. Так-1
рассматривается как 2^64 - 1. (Это 64-разрядное значение без знака, и именно так оно и представляется в двоичном виде.) - Возьми результат и мод на 2^32. (Это 32-разрядное значение без знака.)
- Если результат>= 2^31, вычтите 2^32. (Это 32-разрядное значение со знаком, Java
int
.)