Побитовые операции
Иногда приходится изменять значения отдельных битов в целых данных. Это выполняется с помощью побитовых (bitwise) операций путем наложения маски. В языке Java есть четыре побитовые операции:
Они выполняются поразрядно, после того как оба операнда будут приведены к одному типу int или long, так же как и для арифметических операций, а значит, и к одной разрядности. Операции над каждой парой битов выполняются согласно табл. 1.3.
Таблица 1.3. Побитовые операции
nl |
n2 |
~nl |
nl & n2 |
nl | n2 |
nl ^ n2 |
1 1 0 0 |
1 0 1 0 |
0 0 1 1 |
1 0 0 0 |
1 1 1 0 |
0 1 1 0 |
В нашем примере b1 == 50, двоичное представление 00110010, b2 == -99, двоичное представление 10011101. Перед операцией происходит повышение до типа int. Получаем представления из 32-х разрядов для b1 — 0...00110010, для b2 — 1...l0011101. В результате побитовых операций получаем:
Двоичное представление каждого результата занимает 32 бита.
Заметьте, что дополнение ~х всегда эквивалентно (-x)-1.