obo.dev

Давай разбираться с битами

08 Aug 2022

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

Попробуем разобраться с тем, что такое побитовые операторы, и какие операции они могут делать.

Побитовые/битовые операторы производят операции над целочисленными данными на битовом уровне. Эти операции включают в себя проверку, установку и сдвиги имеющихся битов. Например:


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