1. Побитовый оператор AND
Когда-то мы говорили, что все данные хранятся в памяти в двоичной системе. Поэтому довольно давно программисты придумали много чего интересного для работы с двоичным представлением чисел. Например, в Java есть логические операторы, которые работают с битами чисел: AND
(И), OR
(ИЛИ), NOT
(НЕ) и XOR
(исключающее или).
a & b
Данный оператор очень похож на логический оператор AND
(И), только обозначается не двумя амперсандами, а одним:
И применяется он не к числу в целом, а к его битам: число рассматривается как массив бит, и i
-й бит числа-результата вычисляется на основе i
-х бит каждого из двух чисел.
Первый бит результата будет вычисляться на основе первого бита числа a
и первого бита числа b
, второй бит — на основе второго бита числа a
и второго бита числа b
, и т.д.
Ну а оператор AND
(И) означает, что «результирующий бит равен единице, только если бит числа a
равен единице И
бит числа b
равен единице»:
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
Примеры:
Пример | Результат |
---|---|
|
|
|
|
|
|
|
|
2. Побитовый оператор OR
Данный оператор очень похож на логический оператор OR
(ИЛИ), только обозначается уже не двумя вертикальными линиями, а одной:
a | b
Также он применяется не к числу в целом, а к его битам: i-й бит числа-результата вычисляется на основе i-х бит каждого из двух чисел.
Побитовый OR
(ИЛИ) означает, что «результирующий бит равен единице если бит числа a
равен единице ИЛИ
бит числа b
равен единице»:
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
Примеры:
Пример | Результат |
---|---|
|
|
|
|
|
|
|
|
Только когда биты обоих чисел (стоящие на одинаковых позициях) равны нулю, соответствующий бит результата равен нулю.
3. Побитовый оператор XOR
(ИСКЛЮЧАЮЩЕЕ ИЛИ)
Оператор XOR
, его еще называют исключающее или, обозначается символом ^
. Чтобы ввести его на клавиатуре, нужно нажать shift+6 (в английской раскладке).
a ^ b
Данный оператор чем-то похож на оператор OR
, (он даже называется похоже — XOR
)
Побитовый XOR
(ИСКЛЮЧАЮЩЕЕ ИЛИ) означает, что «результирующий бит равен единице, если бит числа a
равен единице ИЛИ
бит числа b
равен единице, но не оба одновременно»:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 1 = 1
0 ^ 0 = 0
Примеры:
Пример | Результат |
---|---|
|
|
|
|
|
|
|
|
Только когда биты обоих чисел (стоящие на одинаковых позициях) разные, соответствующий бит результата равен единице. Если биты одинаковые, результирующий бит равен нулю.
4. Побитовый оператор NOT
(НЕ, ОТРИЦАНИЕ)
Думаю, вы уже догадываетесь, что он означает. Данный оператор очень похож на логический оператор NOT
(НЕ), только обозначается уже не восклицательным знаком, а тильдой:
~a
Этот оператор унарный: применяется не к двум числам, а к одному, перед которым и ставится.
Побитовый NOT
означает, что «результирующий бит равен единице, если бит числа a
равен нулю, и равен нулю, если бит числа a
равен единице»:
~1 = 0
~0 = 1
Примеры:
Пример | Результат |
---|---|
|
|
|
|
|
|
|
|
Данный оператор просто меняет бит 1
на 0
и 0
на 1
.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ