Очень простой вопрос, связанный с синтаксисом Java - PullRequest
0 голосов
/ 01 февраля 2011

Может ли кто-нибудь объяснить мне, что означают следующие символы в следующей строке:

символы | << </strong>

long high = (System.currentTimeMillis() << 16) | 0x4000 | random.nextInt(4096);

Как рассчитывается значение high?

Ответы [ 5 ]

3 голосов
/ 01 февраля 2011

<< - оператор побитового сдвига, об этом вы можете прочитать здесь: <a href="http://www.sap-img.com/java/java-bitwise-shift-operators.htm" rel="nofollow">http://www.sap -img.com / java / java-bitwise-shift-operator.htm .

| является побитовым включением или о котором вы можете прочитать здесь: http://www.roseindia.net/java/master-java/bitwise-bitshift-operators.shtml

2 голосов
/ 01 февраля 2011

<< используется для сдвига битов, в этом случае стрелка влево для сдвига влево

| используется для побитового ИЛИ, что означает, что при заданных двух операндах для позиции выходного бита будет установлено значение 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)
2 голосов
/ 01 февраля 2011
1 голос
/ 01 февраля 2011

«<< 16» означает сдвиг битов значения (currentTimeMillis) на 16 позиций влево. </p>

«| 0x400» означает побитовое ИЛИ это значение с битами 0x400

0 голосов
/ 01 февраля 2011

Символы

|= или

<< = сдвиг бит влево </p>

Таким образом, в основном высокое значение является двоичной операцией

...