<<
используется для сдвига битов, в этом случае стрелка влево для сдвига влево
|
используется для побитового ИЛИ, что означает, что при заданных двух операндах для позиции выходного бита будет установлено значение 1, если один или оба операнда имеют 1 в определенной позиции
System.currentTimeMillis () возвращает 32 бита, это сдвигает его влево
xxxxxxxx yyyyyyyy zzzzzzzz aaaaaaaa
becomes
zzzzzzzz aaaaaaaa 00000000 00000000 (where the right bits are all 0's)
А 0x4000
0x4000 in HEX = 01000000 00000000 in BINARY
random.nextInt (4096) выдает int равным 4096, поэтому может выдавать любую комбинацию битов
0000???? ???????? // where each ? can be randomly 0 or 1
Так в общем,
- как рассчитывается значение high?
Он состоит из этих компонентов
zzzzzzzz aaaaaaaa 0100???? ???????? // binary representation of the long var (4 bytes)
- z и a - младшие 16 бит из текущего времени
- 0100 - это именно та последовательность
- 12? Генерируются случайным образом (0 или 1)