Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Побитовые операторы в C:AND, OR, XOR, Shift и дополнение

Что такое побитовые операторы?

Побитовые операторы используются для манипулирования данными на уровне битов, что также называется программированием на уровне битов. Побитовое оперирует с одним или несколькими битовыми шаблонами или двоичными числами на уровне их отдельных битов. Они используются в числовых вычислениях для ускорения процесса вычислений.

Ниже приведен список побитовых операторов, предоставляемых языком программирования C:

Оператор Значение & Побитовый оператор И| Побитовый оператор ИЛИ^ Оператор побитового исключающего ИЛИ~ Двоичный оператор дополнения до единицы является унарным оператором< Оператор сдвига влево>> Оператор сдвига вправо


Побитовые операторы нельзя напрямую применять к примитивным типам данных, таким как float, double и т. д. Всегда помните, что побитовые операторы в основном используются с целочисленным типом данных из-за его совместимости.

Побитовые логические операторы работают с данными побитно, начиная с младшего значащего бита, т. е. младшего бита, который является крайним правым битом, в направлении старшего значащего бита, который является крайним левым битом.

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

х г х и у х | г х ^ у 0 00000 10111 00111 1110

В этом уроке вы узнаете-

Побитовое И

Это один из наиболее часто используемых логических побитовых операторов. Он представлен одним знаком амперсанда (&). С каждой стороны оператора (&) записываются два целочисленных выражения.
Результатом побитовой операции И является 1, если оба бита имеют значение 1; в противном случае результат всегда равен 0.

Предположим, что у нас есть 2 переменные op1 и op2 со следующими значениями:

Op1 = 0000 1101
Op2 = 0001 1001

Результатом операции И над переменными op1 и op2 будет

Result = 0000 1001

Как мы видим, две переменные сравниваются по крупицам. Всякий раз, когда значение бита в обеих переменных равно 1, результатом будет 1 или 0.

Побитовое ИЛИ

Он представлен одной вертикальной чертой (|). С каждой стороны оператора (|) записываются два целочисленных выражения.

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

Предположим, что у нас есть 2 переменные op1 и op2 со следующими значениями:

Op1 = 0000 1101
Op2 = 0001 1001

Результатом операции ИЛИ над переменными op1 и op2 будет

Result = 0001 1101

Как мы видим, две переменные сравниваются по крупицам. Всякий раз, когда значение бита в одной из переменных равно 1, результатом будет 1 или 0.

Побитовое исключающее ИЛИ

Он представлен символом (^). С каждой стороны оператора (^) записываются два целочисленных выражения.

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

Предположим, что у нас есть 2 переменные op1 и op2 со следующими значениями:

Op1 = 0000 1101
Op2 = 0001 1001

Результатом операции XOR над переменными op1 и op2 будет

Result = 0001 0100

Как мы видим, две переменные сравниваются по крупицам. Всякий раз, когда только одна переменная содержит значение 1, результатом будет 0, иначе результатом будет 0.

Давайте напишем простую программу, демонстрирующую побитовые логические операторы.

#include <stdio.h>
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 20
OR - Value of c is 21
Exclusive-OR - Value of c is 1

Операторы побитового сдвига

Операторы побитового сдвига используются для перемещения/сдвига битовых комбинаций влево или вправо. Влево и вправо — это два оператора сдвига, предоставляемые ‘C’, которые представлены следующим образом:

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

Здесь

Операция сдвига влево сдвинет число «n» битов влево. Крайние левые биты в выражении будут выделены, а справа будут заполнены n битов со значением 0.

Операция сдвига вправо сдвинет число битов на «n» вправо. Самые правые биты 'n' в выражении будут выделены, а значение 0 будет заполнено слева.

Пример:x — целочисленное выражение с данными 1111. После выполнения операции сдвига результатом будет:

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

Операторы сдвига можно комбинировать, после чего их можно использовать для извлечения данных из целочисленного выражения. Давайте напишем программу, демонстрирующую использование операторов побитового сдвига.

#include <stdio.h>
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 80
Right shift - Value of c is 5

После выполнения операции сдвига влево значение станет равным 80, двоичный эквивалент которого равен 101000.

После выполнения операции сдвига вправо значение станет равным 5, двоичный эквивалент которого равен 000101.

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

Побитовое дополнение также называется оператором дополнения до единицы, поскольку оно всегда принимает только одно значение или операнд. Это унарный оператор.

Когда мы выполняем дополнение к любым битам, все единицы становятся нулями и наоборот.

Если у нас есть целочисленное выражение, содержащее 0000 1111, то после выполнения операции побитового дополнения значение станет 1111 0000.

Оператор побитового дополнения обозначается символом тильда (~).

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

#include <stdio.h>
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 <stdio.h>
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;          /*-49 = 11001111 */
   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 = 0
Bitwise OR Operator - x | y = 61
Bitwise XOR Operator- x^y= 61
Bitwise One's Complement Operator - ~x = -49
Bitwise Left Shift Operator x << 2= 192
Bitwise Right Shift Operator x >> 2= 12

Обзор


Язык C

  1. Класс и объект С#
  2. Абстрактный класс и метод С#
  3. Частичный класс C# и частичный метод
  4. Запечатанный класс и метод С#
  5. Операторы С++
  6. C Ключевые слова и идентификаторы
  7. Операторы программирования на C
  8. Интернет вещей и блокчейн - изменение парадигмы
  9. Операторы в C++ с примером:что такое, типы и программы
  10. Операторы Python:арифметические, логические, сравнение, присваивание, побитовые операции и приоритет