Побитовые операции и операторы
Попробуем разобраться с тем, что такое побитовые операторы, и какие операции они могут делать.
Побитовые/битовые операторы производят операции над целочисленными данными на битовом уровне. Эти операции включают в себя проверку, установку и сдвиги имеющихся битов. Например:
a & b
a | b
В этом примере
&
и|
побитовые операторы.
Ниже перечень всех побитовых операторов:
Оператор | Имя | Пример |
---|---|---|
& |
И (AND) | a & b |
| |
ИЛИ (OR) | a | b |
^ |
исключающее ИЛИ (XOR) | a ^ b |
~ |
НЕ (NOT) | ~a |
<< |
побитовый сдвиг влево | a << b |
>> |
побитовый сдвиг вправо | a >> b |
И (AND)
Оператор И (AND) &
возвращает 1, если оба операнда равны 1. В ином случае, вернёт 0.
a | b | a AND b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Эту таблицу ещё принято называть “таблицей истины” для “И (AND)
&
” операций.
Рассмотрим пример работы этого оператора:
12 = 00001100 (в двоичном представлении)
25 = 00011001 (в двоичном представлении)
// AND с операндами 12 и 25
00001100
& 00011001
_____________
00001000 = 8 (в десятичном представлении)
ИЛИ (OR)
Оператор ИЛИ (OR) |
возвращает 1, если оба хотя бы один из операндов равен 1. В ином случае, вернёт 0.
a | b | a OR b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Рассмотрим пример работы этого оператора:
12 = 00001100 (в двоичном представлении)
25 = 00011001 (в двоичном представлении)
OR c операндами 12 и 25
00001100
| 00011001
____________
00011101 = 29 (в десятичном представлении)
Пример на Swift:
var a = 12
var b = 25
var result = a | b
print(result) // 29
исключающее ИЛИ (XOR)
Оператор исключающее ИЛИ (XOR) ^
возвращает 1, только если именно один из операндов равен 1, в то время как, второй равен 0. Хотя если оба операнда равны 1 или оба операнда равны 0, то вернёт 0
a | b | a XOR b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Рассмотрим пример работы этого оператора:
12 = 00001100 (в двоичном представлении)
25 = 00011001 (в двоичном представлении)
XOR с операндами 12 и 25
00001100
^ 00011001
____________
00010101 = 21 (в десятичном представлении)
Пример на Swift:
var a = 12
var b = 25
var result = a ^ b
print(result) // 21