Кодирование и декодирование byteValue, intValue, shortValue, hashCode, longValue - PullRequest
0 голосов
/ 01 мая 2018

Как можно распечатать исходное длинное значение после преобразования его в byteValue, intValue, shortValue, hashCode, longValue.

import java.lang.*;
public class IntegerDemo {
   public static void main(String[] args) {
         Long l = 5148765430l;
         int t = l.intValue();
         System.out.println((new Integer(t)).byteValue());
         System.out.println((new Integer(t)).doubleValue());
         System.out.println((new Integer(t)).hashCode());
         System.out.println((new Integer(t)).longValue());
         System.out.println((new Integer(t)).shortValue());
         System.out.println((new Integer(t)).intValue());
  }
}

1 Ответ

0 голосов
/ 01 мая 2018

A long занимает 64 бита, int занимает 32 бита. Когда вы преобразуете long в int, старшие 32 бита будут отброшены, а младшие 32 бита будут сохранены как int. Например:

Long sourceLong = Long.MAX_VALUE; // in binary 0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111
int i = sourceLong.intValue(); // in binary 1111 1111 1111 1111 1111 1111 1111 1111
System.out.println(i); // decimal -1
Long copyLong = Long.valueOf(i);
System.out.println(sourceLong.equals(copyLong));  //false

Таким образом, вы не можете преобразовать это int обратно в начало long, так как старшие 32 бита потеряны.

Один особый случай, когда старший 33-битный бит long равен нулю, он не теряет никакой точности, даже если старший 32-битный отброшен:

Long sourceLong = 1L; // in binary 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001
int i = sourceLong.intValue(); // in binary 0000 0000 0000 0000 0000 0000 0000 0001
System.out.println(i); // decimal 1
Long copyLong = Long.valueOf(i);
System.out.println(sourceLong.equals(copyLong));  //true

Подобная процедура происходит, когда вы конвертируете int в short(16 bit), в char(16 bit), в byte(16 bit).

...