C Побітові оператори: AND, OR, XOR, Shift & Доповнення (з прикладом)

Зміст:

Anonim

Що таке побітові оператори?

BITWISE OPERATORS використовуються для маніпулювання даними на рівні бітів, що також називається програмуванням рівня бітів. Побітовий оперує одним або декількома бітовими шаблонами або двійковими цифрами на рівні їх окремих бітів. Вони використовуються в числових обчисленнях, щоб пришвидшити процес обчислення.

Далі наводиться список побітових операторів, що надаються мовою програмування 'C':

Оператор Значення
& Побітовий оператор І
| Побітовий оператор АБО
^ Побітовий ексклюзивний оператор АБО
~ Оператор доповнення Binary One - це одинарний оператор
<< Оператор лівої зміни
>> Оператор правої зміни

Побітові оператори не можна застосовувати безпосередньо до примітивних типів даних, таких як float, double та ін. Завжди пам’ятайте одне, що побітові оператори в основному використовуються з цілочисельним типом даних через його сумісність.

Побітові логічні оператори працюють над даними побітово, починаючи з найменш значущого біта, тобто біта LSB, який є самим правим бітом, працюючи в бік MSB (Найзначнішого біта), який є найлівішим бітом.

Результат обчислення побітових логічних операторів показаний у таблиці, наведеній нижче.

х р х & у х | р х у
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.

Побітовий ексклюзив АБО

Він представлений символом (^). По два цілочисельні вирази записуються з кожного боку оператора (^).

Результат побітової операції Ексклюзивно-АБО дорівнює 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

Побітові оператори зсуву

Побітові оператори зсуву використовуються для переміщення / зсуву бітових шаблонів вліво або вправо. Ліворуч та праворуч - це два оператори зміни, надані символом "С", які представлені наступним чином:

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.

Оператор бітового доповнення

Побітове доповнення також називається оператором доповнення, оскільки воно завжди приймає лише одне значення або операнд. Це одинарний оператор.

Коли ми виконуємо доповнення з будь-якими бітами, всі одиниці стають 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."
  • Вони використовуються в програмуванні рівня бітів.
  • Ці оператори використовуються для маніпулювання бітами цілочислового виразу.
  • Логічний, зсув та доповнення - це три типи побітових операторів.
  • Побітовий оператор доповнення використовується для звороту бітів виразу.