Побитови оператори на C ++

В този урок ще научим за битовите оператори в C ++ с помощта на примери.

В C ++ битовите оператори извършват операции върху целочислени данни на индивидуално битово ниво. Тези операции включват тестване, настройка или изместване на действителните битове. Например,

 a & b; a | b;

Ето списък с 6 битови оператора, включени в C ++.

Оператор Описание
& Побитово И Оператор
| Побитов ИЛИ Оператор
^ Побитов XOR оператор
~ Оператор за битово допълване
<< Побитов Shift ляв оператор
>> Побитов Shift надясно оператор

Тези оператори са необходими, тъй като аритметично-логическата единица (ALU), присъстваща в процесора на компютъра, извършва аритметични операции на битово ниво.

Забележка: Изпълнява се операция може да се използва само заедно charи intтипове данни.

1. C ++ Побитови И Оператор

На побитова & оператор връща 1 , ако и само ако и двете величините са 1 . В противен случай връща 0 .

Следващата таблица демонстрира работата на битовия оператор И. Нека a и b са два операнда, които могат да приемат само двоични стойности, т.е. 1 и 0 .

а б a & b
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; )

Изход

 a = 12 b = 25 a & b = 8

В горния пример декларирахме две променливи a и b. Тук, забележете линията,

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

Тук изпълняваме побитово И между променливи a и b.

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

Най- битовите OR | оператор връща 1 , ако поне един от операндите е 1 . В противен случай връща 0 .

Следващата таблица на истината демонстрира работата на битовия оператор ИЛИ . Нека a и b са два операнда, които могат да приемат само двоични стойности, т.е. 1 или 0 .

а б a | б
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. C ++ битов XOR оператор

В побитовото XOR ^ оператор връща 1 , ако и само ако един от операндите е 1 . Ако обаче и двата операнда са 0 , или ако и двата са 1 , резултатът е 0 .

Следващата таблица на истината демонстрира работата на битовия XOR оператор. Нека a и b са два операнда, които могат да приемат само двоични стойности, т.е. 1 или 0 .

а б a b
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: Побитов 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; )

Изход

 a = 12 b = 25 a b = 21

В XOR побитовото на 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-битовото представяне.

Интересни статии...