побитовые операторы Java и символ равенства; составные операторы

Я немного смущен:

long v = 0;
v <<= 8; 
v |= 230;

Я знаю, что ‹‹ — это знаковый оператор сдвига влево, а | Побитовое включающее ИЛИ, но я не понимаю, что делает равенство?

Итак, fist v равно 0. Значит, ‹‹ не имеет никакого эффекта? Тогда оно равняется 1000, но что тогда происходит?

изменить: я отредактировал заголовок, чтобы другие могли лучше найти этот вопрос: добавлены «составные операторы»


person Thomas    schedule 25.07.2013    source источник
comment
Это имеет эффект. v = v << 8, а затем v = v | 230.   -  person Maroun    schedule 25.07.2013


Ответы (3)


Есть что-то вроде +=.

Например, x+=3 означает добавить 3 к х; хранить до х.

v <<= 8;

сдвигает влево v на 8 бит и сохраняет в v, что функционально эквивалентно v=v << 8.

v |= 230;

выполняет побитовое ИЛИ с 230 и сохраняет обратно в v, что эквивалентно v=v | 230.

Теперь из-за ограничений производительности и оптимизации эту операцию можно выполнить на месте на низком уровне.

person nanofarad    schedule 25.07.2013
comment
@ Томас Нет проблем. Пожалуйста, примите ответ, который помог вам больше всего, поставив галочку рядом с ним. - person nanofarad; 25.07.2013
comment
Мне нужно подождать несколько минут, прежде чем я смогу; но я буду :) - person Thomas; 25.07.2013
comment
После выполнения v=v | 230 каким будет значение v ?? - person Suresh Atta; 25.07.2013
comment
@sureshatta Просто попробуйте и посмотрите. Это зависит от исходного значения v - person nanofarad; 25.07.2013

Это составные операторы, такие как += и -=. Они выполняют операцию, а затем присваивают результат обратно v.

В принципе:

v <<= 8;

действует

v = v << 8;

И аналогично

v |= 230;

действует

v = v | 230;

Вы можете увидеть параллель с += и -=:

v += 1;

эффективно

v = v + 1;
person T.J. Crowder    schedule 25.07.2013

В основном это:

v <<= 8; 
v |= 230;

эквивалентно этому:

v = v << 8; 
v = v | 230;
person jh314    schedule 25.07.2013