V tej vadnici bomo s pomočjo primerov spoznali bitne operatorje v jeziku C ++.
V C ++ bitni operaterji izvajajo operacije s celoštevilčnimi podatki na posamezni ravni bitov. Te operacije vključujejo preizkušanje, nastavljanje ali premikanje dejanskih bitov. Na primer
a & b; a | b;
Tu je seznam 6 bitnih operatorjev, vključenih v C ++.
Operater | Opis |
---|---|
& | Bit-bit in operater |
| | Bitno ALI operater |
^ | Bit-ov operater XOR |
~ | Operator bitnega komplementa |
<< | Bit-ov premik levo |
>> | Operator bit-shift Shift v desno |
Ti operaterji so potrebni, ker aritmetično-logična enota (ALU), ki je prisotna v CPU računalnika, izvaja aritmetične operacije na bitni ravni.
Opomba: operaterji bitni se lahko uporablja samo skupaj char
in int
podatkovnih tipov.
1. C ++ bitni in operater
V bitni IN &
operator vrne 1 , če in samo če sta oba operanda 1 . V nasprotnem primeru vrne 0 .
Naslednja tabela prikazuje delovanje bitnega operatorja AND . Naj bosta a in b dva operanda, ki lahko sprejmeta samo binarne vrednosti, tj. 1 in 0 .
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1. | 0 |
1. | 0 | 0 |
1. | 1. | 1. |
Opomba: Zgornja tabela je znana kot "tabela resnic " za bitni operater AND .
Oglejmo si bitno AND delovanje dveh celih števil 12 in 25:
12 = 00001100 (v binarni različici) 25 = 00011001 (v binarni obliki) // Bitno in delovanje 12 in 25 00001100 & 00011001 _________ 00001000 = 8 (v decimalni obliki)
Primer 1: Bitni AND
#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; )
Izhod
a = 12 b = 25 a & b = 8
V zgornjem primeru smo razglasili dve spremenljivki a in b. Tukaj, opazite vrstico,
cout << "a & b = " << (a & b) << endl;
Tu izvajamo bitni AND med spremenljivkama a in b.
2. C ++ bitni ALI operater
V bitni ALI |
operater vrne 1 , če je vsaj eden od operandov 1 . V nasprotnem primeru vrne 0 .
Naslednja tabela resnic prikazuje delovanje bitnega operaterja OR . Naj bosta a in b dva operanda, ki lahko sprejmeta samo binarne vrednosti, tj. 1 ali 0 .
a | b | a | b |
---|---|---|
0 | 0 | 0 |
0 | 1. | 1. |
1. | 0 | 1. |
1. | 1. | 1. |
Oglejmo si bitno ALI operacijo dveh celih števil 12 in 25 :
12 = 00001100 (v binarni obliki) 25 = 00011001 (v binarni obliki) Bitno ALI delovanje 12 in 25 00001100 | 00011001 _________ 00011101 = 29 (v decimalnih številkah)
Primer 2: Bitno ALI
#include int main() ( int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a | b = " << (a | b) << endl; return 0; )
Izhod
a = 12 b = 25 a | b = 29
Bitni ALI za a = 12
in b = 25
daje 29
.
3. Operater XOR v bitnih različicah C ++
Bitni XOR ^
operater vrne 1 , če in samo če je eden od operandov je 1 . Če sta oba operanda 0 ali če sta oba 1 , je rezultat 0 .
Naslednja tabela resnic prikazuje delovanje bitnega operaterja XOR . Naj bosta a in b dva operanda, ki lahko sprejmeta samo binarne vrednosti, tj. 1 ali 0 .
a | b | a b |
---|---|---|
0 | 0 | 0 |
0 | 1. | 1. |
1. | 0 | 1. |
1. | 1. | 0 |
Poglejmo si bitno XOR delovanje dveh celih števil 12 in 25:
12 = 00001100 (v binarnem) 25 = 00011001 (v binarnem) Bitno XOR Delovanje 12 in 25 00001100 00011001 _________ 00010101 = 21 (v decimalnem)
Primer 3: Bitni XOR
#include int main() ( int a = 12, b = 25; cout << "a = " << a << endl; cout << "b = " << b << endl; cout << "a b = " << (a b) << endl; return 0; )
Izhod
a = 12 b = 25 a b = 21
Bitni XOR za a = 12
in b = 25
daje 21
.
4. Operater bitnega komplementa C ++
Operator bitnega komplementa je unarni operater (deluje samo na enem operandu). Označuje se s ~
tem, da spremeni binarne številke 1 na 0 in 0 na 1 .

Pomembno je omeniti, da je bitno dopolnilo katerega koli celega števila N enako - (N + 1) . Na primer
Upoštevajte celo število 35 . V skladu s pravilom bi moral biti bitni dodatek 35 - (35 + 1) = -36 . Zdaj pa poglejmo, ali smo dobili pravilen odgovor ali ne.
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 >>
.
Ko poljubno število premaknemo v desno, se najmanj pomembni biti zavržejo, najpomembnejše bite pa nadomestijo ničle.

Kot vidimo na zgornji sliki, imamo 4-bitno številko . Ko opravimo z eno-bitno delovanje prav premik na njej, je vsak posameznik malo premaknilo v desno za 1 bit.
Kot rezultat se zavrže skrajno desni bit, medtem ko ostane skrajno levi prazen. To prosto delovno mesto se nadomesti z 0 .
6. C ++ Left Shift Operator
Levo operater premik premika vse bitov smeri po določenem številu levo določenih bitov . Označuje se z <<
.

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
Posledično je lahko bitna operacija levega premika za 13 (in katero koli drugo številko) različna, odvisno od števila bitov, ki jih predstavljajo.
Ker je v 32-bitni predstavitvi v primerjavi s 4-bitno predstavitvijo veliko več bitov, ki jih je mogoče premakniti levo .