C Побитови оператори: AND, OR, XOR, Shift & Допълнение (с пример)

Съдържание:

Anonim

Какво представляват битовите оператори?

BITWISE OPERATORS се използват за манипулиране на данни на битово ниво, наричано още програмиране на битово ниво. Побитовият оперира с един или повече битови модели или двоични цифри на нивото на отделните им битове. Те се използват при числени изчисления, за да ускорят процеса на изчисление.

Следва списъкът на битови оператори, предоставени от програмния език 'C':

Оператор Значение
& Побитови И оператор
| Побитови ИЛИ оператор
^ Побитово изключителен ИЛИ оператор
~ Допълнителният оператор на Binary One е унарен оператор
<< Оператор на лява смяна
>> Оператор на дясна смяна

Побитовите оператори не могат да се прилагат директно към примитивни типове данни като float, double и т.н. Винаги помнете едно нещо, че побитовите оператори се използват предимно с целочисления тип данни поради неговата съвместимост.

Побитовите логически оператори работят по данни бит по бит, започвайки от най-малко значимия бит, т.е. LSB бит, който е най-десният бит, работещ към MSB (Най-значимият бит), който е най-левият бит.

Резултатът от изчислението на битови логически оператори е показан в таблицата, дадена по-долу.

х у x & y x | у x y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

В този урок ще научите -

  • Какво представляват битовите оператори?
  • Побитово И
  • Побитово ИЛИ
  • Изключително побитово ИЛИ
  • Побитови оператори на смяна
  • Оператор за битово допълнение

Побитово И

Това е един от най-често използваните логически битови оператори. Представен е с един знак за амперсанд (&). Два целочислени израза са написани от всяка страна на оператора (&).

Резултатът от битовата операция И е 1, ако двата бита имат стойността 1; в противен случай резултатът винаги е 0.

Нека разгледаме, че имаме 2 променливи op1 и op2 със стойности, както следва:

Op1 = 0000 1101Op2 = 0001 1001

Резултатът от операцията И върху променливите op1 и op2 ще бъде

Result = 0000 1001

Както виждаме, две променливи се сравняват малко по малко. Когато стойността на бита и в двете променливи е 1, резултатът ще бъде 1 или 0.

Побитово ИЛИ

Представен е с единичен вертикален знак (|). От всяка страна на оператора (|) са написани два целочислени израза.

Резултатът от битовата операция ИЛИ е 1, ако поне един от изразите има стойността 1; в противен случай резултатът винаги е 0.

Нека разгледаме, че имаме 2 променливи op1 и op2 със стойности, както следва:

Op1 = 0000 1101Op2 = 0001 1001

Резултатът от операцията ИЛИ за променливи op1 и op2 ще бъде

Result = 0001 1101

Както виждаме, две променливи се сравняват малко по малко. Когато стойността на бита в една от променливите е 1, резултатът ще бъде 1 или 0.

Изключително побитово ИЛИ

Представен е със символ (^). От всяка страна на оператора (^) са написани два целочислени израза.

Резултатът от битовата операция Exclusive-OR е 1, ако само един от изразите има стойността 1; в противен случай резултатът винаги е 0.

Нека разгледаме, че имаме 2 променливи op1 и op2 със стойности, както следва:

Op1 = 0000 1101Op2 = 0001 1001

Резултатът от операцията ИЛИ за променливи op1 и op2 ще бъде

Result = 0001 0100

Както виждаме, две променливи се сравняват малко по малко. Когато само една променлива съдържа стойността 1, резултатът е 0, а 0 ще бъде резултатът.

Нека напишем проста програма, която демонстрира битови логически оператори.

#include int main(){int a = 20; /* 20 = 010100 */int b = 21; /* 21 = 010101 */int c = 0;c = a & b; /* 20 = 010100 */printf("AND - Value of c is %d\n", c );c = a | b; /* 21 = 010101 */printf("OR - Value of c is %d\n", c );c = a b; /* 1 = 0001 */printf("Exclusive-OR - Value of c is %d\n", c );getch();}

Изход:

AND - Value of c is 20OR - Value of c is 21Exclusive-OR - Value of c is 1

Побитови оператори на смяна

Операторите на битово изместване се използват за преместване / изместване на битовите модели или вляво или вдясно. Вляво и вдясно са два оператора на смяна, предоставени от „C“, които са представени, както следва:

Operand << n (Left Shift)Operand >> n (Right Shift)

Тук,

  • операндът е цяло число израз, върху който трябва да извършим операцията за смяна.
  • 'n' е общият брой битови позиции, които трябва да изместим в целочисления израз.

Операцията за лява смяна ще измести 'n' броя битове в лявата страна. Най-левите битове в израза ще бъдат изскачани, а n бита със стойност 0 ще бъдат запълнени от дясната страна.

Операцията за дясна смяна ще измести 'n' броя битове в дясната страна. Най-десните 'n' бита в израза ще бъдат изскачащи и стойността 0 ще бъде попълнена отляво.

Пример: x е цяло число израз с данни 1111. След извършване на операция смяна резултатът ще бъде:

x << 2 (left shift) = 1111<<2 = 1100x>>2 (right shift) = 1111>>2 = 0011

Операторите на смени могат да се комбинират, след което може да се използва за извличане на данните от целочисления израз. Нека напишем програма, за да демонстрираме използването на битови оператори на смяна.

#include int main() {int a = 20; /* 20 = 010100 */int c = 0;c = a << 2; /* 80 = 101000 */printf("Left shift - Value of c is %d\n", c );c = a >> 2; /*05 = 000101 */printf("Right shift - Value of c is %d\n", c );return 0;}

Изход:

Left shift - Value of c is 80Right shift - Value of c is 5

След извършване на операцията за лява смяна стойността ще стане 80, чийто двоичен еквивалент е 101000.

След извършване на операцията за дясна смяна, стойността ще стане 5, чийто двоичен еквивалент е 000101.

Оператор за битово допълнение

Побитовото допълнение се нарича още оператор за допълване, тъй като винаги отнема само една стойност или операнд. Това е единствен оператор.

Когато изпълняваме допълнение върху произволни битове, всички 1 стават 0 и обратно.

Ако имаме цяло число израз, който съдържа 0000 1111, след извършване на операция на битово допълнение стойността ще стане 1111 0000.

Побитовият оператор на комплемента се обозначава със символ тилда (~).

Нека напишем програма, която демонстрира изпълнението на битово допълващ оператор.

#include int main() {int a = 10; /* 10 = 1010 */int c = 0;c = ~(a);printf("Complement - Value of c is %d\n", c );return 0;}

Изход:

Complement - Value of c is -11

Ето още една програма, с пример за всички обсъждани до момента оперети:

#include main() {unsigned int x = 48; /* 48 = 0011 0000 */unsigned int y = 13; /* 13 = 0000 1101 */int z = 0;z =x & y; /* 0 = 0000 0000 */printf("Bitwise AND Operator - x & y = %d\n", z );z = x | y; /* 61 = 0011 1101 */printf("Bitwise OR Operator - x | y = %d\n", z );z= x^y; /* 61 = 0011 1101 */printf("Bitwise XOR Operator- x^y= %d\n", z);z = ~x; /*-61 = 1100 0011 */printf("Bitwise One's Complement Operator - ~x = %d\n", z);z = x << 2; /* 192 = 1100 0000 */printf("Bitwise Left Shift Operator x << 2= %d\n", z );z= x >> 2; /* 12 = 0000 1100 */printf ("Bitwise Right Shift Operator x >> 2= %d\n", z );}

След като компилираме и стартираме програмата, тя дава следния резултат:

Bitwise AND Operator - x & y = 0Bitwise OR Operator - x | y = 61Bitwise XOR Operator- x^y= 61Bitwise One's Complement Operator - ~x = -49Bitwise Left Shift Operator x << 2= 192Bitwise Right Shift Operator x >> 2= 12

Обобщение

  • Побитовите оператори са специален операторски набор, предоставен от „C.“
  • Те се използват при програмиране на битово ниво.
  • Тези оператори се използват за манипулиране на битове на цяло число израз.
  • Логически, shift и допълнение са три вида битови оператори.
  • Операторът на битово допълнение се използва за обръщане на битовете на израз.