Вместо преобразования long
в массивы int
, просто используйте побитовые операции.
Я хочу поменять первые 32 бита на последние 32 бита
Это будет:
long result = ((x & 0xFFFFFFFF00000000l) >> 32) | ((x & 0x00000000FFFFFFFFl) << 32);
Это маскирует первые 32 бита, сдвигает их вправо, маскирует последние 32 бита, сдвигает их влево и объединяет результат с |
(ИЛИ).
Пример в реальном времени :
class Example
{
public static void main (String[] args) throws java.lang.Exception
{
long x = 0x1000000020000000l;
long result = ((x & 0xFFFFFFFF00000000l) >> 32) | ((x & 0x00000000FFFFFFFFl) << 32);
System.out.printf("0x%016X\n", x);
System.out.printf("0x%016X\n", result);
}
}
Выходы:
0x1000000020000000
0x2000000010000000
Больше в Побитовое и битовое смещениеУчебник для операторов .