Иллюстрированный самоучитель по Java

Побитовые операции


Иногда приходится изменять значения отдельных битов в целых данных. Это выполняется с помощью побитовых (bitwise) операций путем наложения маски. В языке Java есть четыре побитовые операции:

дополнение (complement)

~

(тильда); 

побитовая конъюнкция (bitwise AND)

&

побитовая дизъюнкция (bitwise OR)

|

побитовое исключающее ИЛИ (bitwise XOR)

^

.



Они выполняются поразрядно, после того как оба операнда будут приведены к одному типу

int

или

long

, так же как и для арифметических операций, а значит, и к одной разрядности. Операции над каждой парой битов выполняются согласно табл. 1.3.

Таблица 1.3.

Побитовые операции

nl

n2

~nl

nl & n2

nl | n2

nl ^ n2

1

0

0

0

1

0

0

0

0

В нашем примере

b1 == 50

, двоичное представление

00110010, b2 == -99

, двоичное представление

10011101

. Перед операцией происходит повышение до типа

int

. Получаем представления из 32-х разрядов для

b1 — 0...00110010

, для

b2 — 1...l0011101

. В результате побитовых операций получаем:

~b2 == 98

, двоичное представление

0...01100010

;

b1 & b2 == 16

, двоичное представление

0...00010000

;

b1 | b2 == -65

, двоичное представление

1...10111111

;

b1 ^ b2 == -81

, двоичное представление

1...10101111

Двоичное представление каждого результата занимает 32 бита. 

Заметьте, что дополнение

всегда эквивалентно

(-x)-1

.



Содержание раздела