В этом руководстве мы узнаем о побитовых операторах в C ++ с помощью примеров.
В C ++ побитовые операторы выполняют операции с целочисленными данными на индивидуальном битовом уровне. Эти операции включают тестирование, установку или сдвиг фактических битов. Например,
a & b; a | b;
Вот список из 6 побитовых операторов, включенных в C ++.
Оператор | Описание |
---|---|
& | Побитовый оператор И |
| | Побитовый оператор ИЛИ |
^ | Побитовый оператор XOR |
~ | Оператор побитового дополнения |
<< | Оператор побитового сдвига влево |
>> | Оператор побитового сдвига вправо |
Эти операторы необходимы, потому что арифметико-логический блок (ALU), присутствующий в ЦП компьютера, выполняет арифметические операции на битовом уровне.
Примечание. Побитовые операторы могут использоваться только вместе с типами данных char
и int
.
1. Побитовый оператор И в C ++
В побитовое И &
оператор возвращает 1 , если и только если оба операнда 1 . В противном случае возвращается 0 .
Следующая таблица демонстрирует работу побитового оператора AND . Пусть a и b - два операнда, которые могут принимать только двоичные значения, то есть 1 и 0 .
а | б | а и б |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Примечание. Приведенная выше таблица известна как «Таблица истинности» для побитового оператора AND .
Давайте посмотрим на операцию побитового И двух целых чисел 12 и 25:
12 = 00001100 (в двоичном формате) 25 = 00011001 (в двоичном формате) // Побитовая операция И для 12 и 25 00001100 и 00011001 _________ 00001000 = 8 (в десятичном формате)
Пример 1: побитовое И
#include using namespace std; int main() ( // declare variables int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a & b = " << (a & b) << endl; return 0; )
Вывод
а = 12 б = 25 а и б = 8
В приведенном выше примере мы объявили две переменные a и b. Здесь обратите внимание на линию,
cout << "a & b = " << (a & b) << endl;
Здесь мы выполняем побитовое И между переменными a и b.
2. Оператор побитового ИЛИ в C ++
Оператор побитового ИЛИ |
возвращает 1, если хотя бы один из операндов равен 1 . В противном случае возвращается 0 .
Следующая таблица истинности демонстрирует работу побитового оператора ИЛИ . Пусть a и b будут двумя операндами, которые могут принимать только двоичные значения, например 1 или 0 .
а | б | а | б |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Давайте посмотрим на операцию поразрядного ИЛИ двух целых чисел 12 и 25 :
12 = 00001100 (двоичный) 25 = 00011001 (двоичный) Побитовая операция ИЛИ для 12 и 25 00001100 | 00011001 _________ 00011101 = 29 (в десятичной системе)
Пример 2: Побитовое ИЛИ
#include int main() ( int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a | b = " << (a | b) << endl; return 0; )
Вывод
a = 12 b = 25 a | b = 29
Побитовое ИЛИ из a = 12
и b = 25
дает 29
.
3. Побитовый оператор XOR в C ++
Побитовое исключающее ^
ИЛИ оператор возвращает 1 , если и только если один из операндов 1 . Однако, если оба операнда равны 0 или оба равны 1 , то результат будет 0 .
Следующая таблица истинности демонстрирует работу побитового оператора XOR . Пусть a и b будут двумя операндами, которые могут принимать только двоичные значения, например 1 или 0 .
а | б | а б |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Давайте посмотрим на побитовую операцию XOR двух целых чисел 12 и 25:
12 = 00001100 (двоичный) 25 = 00011001 (двоичный) Побитовая операция XOR 12 и 25 00001100 00011001 _________ 00010101 = 21 (десятичный)
Пример 3: побитовое исключающее ИЛИ
#include int main() ( int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a b = " << (a b) << endl; return 0; )
Вывод
а = 12 б = 25 а б = 21
Побитовое исключающее из a = 12
и b = 25
дает 21
.
4. Оператор побитового дополнения C ++
Оператор поразрядного дополнения - это унарный оператор (работает только с одним операндом). Он обозначается тем, ~
что изменяет двоичные цифры 1 на 0 и 0 на 1 .

Важно отметить, что побитовое дополнение любого целого числа N равно - (N + 1) . Например,
Рассмотрим целое число 35 . Согласно правилу, побитовое дополнение до 35 должно быть - (35 + 1) = -36 . Теперь посмотрим, получим ли мы правильный ответ или нет.
35 = 00100011 (In Binary) // Using bitwise complement operator ~ 00100011 __________ 11011100
In the above example, we get that the bitwise complement of 00100011 (35) is 11011100. Here, if we convert the result into decimal we get 220.
However, it is important to note that we cannot directly convert the result into decimal and get the desired output. This is because the binary result 11011100 is also equivalent to -36.
To understand this we first need to calculate the binary output of -36. We use 2's complement to calculate the binary of negative integers.
2's Complement
The 2's complement of a number N gives -N.
In binary arithmetic, 1's complement changes 0 to 1 and 1 to 0.
And, if we add 1 to the result of the 1's complement, we get the 2's complement of the original number.
For example,
36 = 00100100 (In Binary) 1's Complement = 11011011 2's Complement : 11011011 + 1 _________ 11011100
Here, we can see the 2's complement of 36 (i.e. -36) is 11011100. This value is equivalent to the bitwise complement of 35 that we have calculated in the previous section.
Hence, we can say that the bitwise complement of 35 = -36.
Example 4: Bitwise Complement
#include int main() ( int num1 = 35; int num2 = -150; cout << "~(" << num1 << ") = " << (~num1) << endl; cout << "~(" << num2 << ") = " << (~num2) << endl; return 0; )
Output
~(35) = -36 ~(-150) = 149
In the above example, we declared two integer variables num1 and num2, and initialized them with the values of 35
and -150
respectively.
We then computed their bitwise complement with the codes (~num1)
and (~num2)
respectively and displayed them on the screen.
The bitwise complement of 35 = - (35 + 1) = -36 i.e. ~35 = -36 The bitwise complement of -150 = - (-150 + 1) = - (-149) = 149 i.e. ~(-150) = 149
This is exactly what we got in the output.
C++ Shift Operators
There are two shift operators in C++ programming:
- Right shift operator
>>
- Left shift operator
<<
5. C++ Right Shift Operator
The right shift operator shifts all bits towards the right by a certain number of specified bits. It is denoted by >>
.
Когда мы сдвигаем любое число вправо, наименее значимые биты отбрасываются, а наиболее значимые биты заменяются нулями.

Как видно из изображения выше, у нас есть 4-битное число . Когда мы выполняем над ним однобитную операцию сдвига вправо, каждый отдельный бит сдвигается вправо на 1 бит.
В результате самый правый бит отбрасывается, а самый левый бит остается свободным. Эта вакансия заменяется на 0 .
6. Оператор левого сдвига в C ++
Оператор сдвига влево сдвигает все биты влево на определенное количество заданных битов . Обозначается он <<
.

As we can see from the image above, we have a 4-bit number. When we perform a 1 bit left shift operation on it, each individual bit is shifted to the left by 1 bit.
As a result, the left-most bit is discarded, while the right-most bit remains vacant. This vacancy is replaced by a 0.
Example 5: Shift Operators
#include int main() ( // declaring two integer variables int num = 212, i; // Shift Right Operation cout << "Shift Right:" << endl; // Using for loop for shifting num right from 0 bit to 3 bits for (i = 0; i < 4; i++) ( cout <> " << i << " = " <> i) << endl; ) // Shift Left Operation cout << "Shift Left:" << endl; // Using for loop for shifting num left from 0 bit to 3 bits for (i = 0; i < 4; i++) ( cout << "212 << " << i << " = " << (212 << i) << endl; ) return 0; )
Output
Shift Right: 212>> 0 = 212 212>> 1 = 106 212>> 2 = 53 212>> 3 = 26 Shift Left: 212 << 0 = 212 212 << 1 = 424 212 << 2 = 848 212 << 3 = 1696
From the output of the program above, we can infer that, for any number N, the results of the shift right operator are:
N>> 0 = N N>> 1 = (N>> 0) / 2 N>> 2 = (N>> 1) / 2 N>> 3 = (N>> 2) / 2
and so on.
Similarly, the results of the shift left operator are:
N << 0 = N N << 1 = (N << 0) * 2 N << 2 = (N << 1) * 2 N << 3 = (N << 2) * 2
and so on.
Hence we can conclude that,
N>> m = ( N>> (m-1) ) / 2 N << m = ( N << (m-1) ) * 2
In the above example, note that the int
data type stores numbers in 32-bits i.e. an int
value is represented by 32 binary digits.
However, our explanation for the bitwise shift operators used numbers represented in 4-bits.
For example, the base-10 number 13 can be represented in 4-bit and 32-bit as:
4-bit Representation of 13 = 1101 32-bit Representation of 13 = 00000000 00000000 00000000 00001101
В результате побитовая операция сдвига влево для 13 (и любого другого числа) может отличаться в зависимости от количества битов, которыми они представлены.
Потому что в 32-битном представлении гораздо больше битов, которые можно сдвинуть влево по сравнению с 4-битным представлением.