Ц ++ битовни оператори

У овом упутству ћемо научити о битним операторима у Ц ++ уз помоћ примера.

У Ц ++, битни оператори изводе операције над целобројним подацима на појединачном нивоу бита. Ове операције укључују испитивање, подешавање или померање стварних битова. На пример,

 a & b; a | b;

Ево листе од 6 битних оператора укључених у Ц ++.

Оператор Опис
& Битовни И Оператор
| Бит-ов ИЛИ Оператор
^ Бит-ов КСОР оператор
~ Оператор битног комплемента
<< Оператор у смеру померања улево
>> Померити удесно оператора

Ови оператори су неопходни јер аритметичко-логичка јединица (АЛУ) присутна у процесору рачунара врши аритметичке операције на нивоу битова.

Напомена: Битвисе оператери могу се користити само уз charи intтипове података.

1. Ц ++ Битвисе АНД Оператор

У Битвисе И & оператор враћа 1 ако и само ако оба су операнди 1 . У супротном, враћа 0 .

Следећа табела приказује рад битног оператора АНД . Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 1 и 0 .

а б а & б
0 0 0
0 1 0
1 0 0
1 1 1

Напомена: Горња табела је позната под називом „Табела истине“ за битни И оператор.

Погледајмо битни И рад две целобројне 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

У горњем примеру смо прогласили две променљиве а и б. Ево, примети ред,

 cout << "a & b = " << (a & b) << endl;

Овде изводимо битни И између променљивих а и б.

2. Ц ++ битовни ИЛИ оператор

У Битвисе ИЛИ | оператор враћа 1 ако је бар један од операнада је 1 . У супротном, враћа 0 .

Следећа табела истинитости приказује рад битног ИЛИ оператора. Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 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; )

Оутпут

а = 12 б = 25 а | б = 29

Битовима ИЛИ од a = 12и b = 25даје 29.

3. Оператер КСОР у битовима КСОР

Битовима ЛОЛ ^ оператор враћа 1 ако и само ако је један од операнада је 1 . Међутим, ако су оба операнда 0 , или ако су оба 1 , онда је резултат 0 .

Следећа табела истинитости приказује рад битног КСОР оператора. Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 1 или 0 .

а б а б
0 0 0
0 1 1
1 0 1
1 1 0

Погледајмо битну КСОР операцију две целобројне 12 и 25:

 12 = 00001100 (у бинарном) 25 = 00011001 (у бинарном) Битно КСОР рад 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. Оператор Ц-битног комплемента

Оператор битног комплемента је унарни оператор (ради на само једном операнду). Означава се тиме ~што мења бинарне цифре 1 у 0 и 0 у 1 .

Бит-ов комплемент

Важно је напоменути да је битни комплемент било ког целог броја Н једнак - (Н + 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. Ц ++ Лефт Схифт Оператор

Оператер леве помак помера све делове према лево од одређеног броја одређених бита . Означава се са <<.

један бит Лефт Схифт

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-битним приказом.

Занимљиви Чланци...