Побитовый оператор в языке C

Работа с байтами или типами данных, состоящими из байтов, таких как ints, floats, double или даже структур данных, которые хранят большое количество битов, является нормальной для программиста. В некоторых случаях программисту нужно выйти за пределы этого — то есть на более глубокий уровень, где осознается важность битов.

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

Мы все знаем, что 1 байт состоит из 8 битов, и любое целое число или символ может быть представлен с помощью битов в компьютерах, которые мы называем его двоичной формой(содержит только 1 или 0).

Побитовый оператор в C

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

Есть различные типы побитовых операторов в языке программирования Си. Ниже приведен список побитовых операторов:

  • Побитовый оператор «И»
  • Побитовый оператор ИЛИ
  • Побитовое исключающее ИЛИ
  • Оператор дополнения (унарный оператор)
  • Оператор сдвига влево
  • Оператор сдвига вправо

Давайте посмотрим на таблицу истинности побитовых операторов.

XYX&YX|YX^Y

 

00000
01011
10011
11111

Оператор побитовое И

Побитовый оператор И обозначается одним знаком амперсанда (&). Два целочисленных операнда записываются с обеих сторон оператора ( & ). Если соответствующие биты обоих операндов равны 1, то выход побитовой операции И равен 1; в противном случае выход будет равен 0.

Например, у нас есть две переменные a и b.

а =6;
b=4;

Двоичное представление этих двух переменных приведено ниже:

а = 0110
b = 0100

Когда мы применяем побитовую операцию И в приведенных выше двух переменных, то есть a&b, выход будет следующим:

Результат = 0100

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

Пример

#include <stdio.h>
intmain()
{
inta=6, b=14; // объявление переменных
printf(«Выход побитового оператора ANDa&b равен %d»,a&b);
return0;
}

В приведенном выше коде мы создали две переменные, то есть «a» и «b». Значения «а» и «в» равны 6 и 14 соответственно. Двоичные значения «а» и «в» равны 0110 и 1110 соответственно. Когда мы применяем оператор AND между этими двумя переменными,

a И b = 0110 && 1110 = 0110

Выход

Выход побитового оператора AND a&b равен 6

Побитовый оператор ИЛИ

Побитовый оператор ИЛИ представлен одним вертикальным знаком (|). Два целочисленных операнда записываются с обеих сторон символа ( | ). Если битовое значение любого из операндов равно 1, то выход будет равен 1, в противном случае 0.

Например, рассмотрим две переменные,

a = 23;
b = 10;

Двоичное представление этих двух переменных будет иметь вид:

a = 0001 0111
b = 0000 1010

Когда мы применяем побитовый оператор OR в вышеприведенных двух переменных, то есть a|b, то выход будет следующим:

Результат = 0001 1111

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

#include <stdio.h>
intmain()
{
inta=23,b=10; // объявление переменных
printf(«»Выход побитового оператора ORa|b равен %d»,a|b);
return 0;
}

Выход

Выход побитового оператора ORa|b равен 31

Побитовое исключение ИЛИ оператор

Побитовое исключение ИЛИ оператор обозначается символом ( ^ ). Две операнда записываются с обеих сторон исключающего оператора ИЛИ. Если соответствующий бит любого из операндов равен 1, то выход будет равен 1, в противном случае 0.

Например, рассмотрим две переменные a и b,

a = 12;
b = 10;

Двоичное представление этих двух переменных будет иметь вид:

a = 0000 1100
b = 0000 1010

Когда мы применяем побитовый оператор ИЛИ в приведенных выше двух переменных (a^b), то результатом будет:

Результат = 0000 1110

Как видно из приведенного выше результата, биты обоих операндов сравниваются один за другим; если соответствующее битовое значение любого из операндов равно 1, то выход будет равен 1, иначе 0. Давайте разберемся в побитовом исключающем операторе ИЛИ через программу.

#include <stdio.h>
intmain()
{
inta=12,b=10; // variable declarations
printf(«Выход побитового исключающего оператора ИЛИ a^b равен %d»,a^b);
return 0;
}

Выход

Выход побитового исключающего оператора ИЛИa^b равен 6

Побитовый оператор дополнения

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

Например, если у нас есть переменная с именем ‘a’,

a = 8;

Двоичное представление вышеприведенной переменной приведено ниже:

а = 1000

Когда мы применяем побитовый оператор дополнения к операнду, то выход будет следующим:

Результат = 0111

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

#include <stdio.h>
int main()
{
inta=8; // variable declarations
printf(«Выход побитового оператора дополнения ~a равен %d «,~a);
return0;
}

Выход

Выход побитового оператора дополнения ~a равен -9

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

В программировании на языке Си существуют два типа операторов побитового сдвига. Операторы побитового сдвига будут сдвигать биты либо на левую, либо на правую сторону. Поэтому можно сказать, что оператор побитового сдвига делится на две категории:

  1. Оператор сдвига влево
  2. Оператор сдвига вправо

Синтаксис оператора сдвига влево приведен ниже:

Operand<< n

Где, операнд — это целочисленное выражение, к которому мы применяем операцию сдвига влево.
n — это число битов, которые должны быть сдвинуты.

В случае оператора левого сдвига » n » битов будут сдвинуты на левую сторону. Биты ‘N’ на левой стороне будет выскочила, и ‘n’ бит на правой стороне заполняются 0.

Например, предположим, у нас есть утверждение:

int a = 5;

Двоичное представление » а » приведено ниже:

а = 0101

Если мы хотим сдвинуть вышеприведенное представление влево на 2, то утверждение будет следующим:

a << 2;
0101<<2 = 00010100

Давайте разберемся с помощью программы.

#include <stdio.h>
int main()
{
int a=5; // variable initialization
printf(«The value of a<<2 is : %d «,a<<2);
return 0;
}

Выход

Значение a<<2 равно 20

Синтаксис оператора сдвига вправо приведен ниже:

Operand>> n;

Где, операнд — это целочисленное выражение, к которому мы применяем операцию сдвига вправо. N — это число битов, которые должны быть сдвинуты. В случае оператора сдвига вправо » n » битов будет смещено на правую сторону. Биты ‘N’ на правой стороне будут выдавлены, а n-биты слева заполняются 0.

Например, предположим, у нас есть утверждение,

int a = 7;

Двоичное представление вышеприведенной переменной будет:

а = 0111

Если мы хотим сдвинуть приведенное выше представление вправо на 2, то утверждение будет:

а>>2;
0000 0111 >> 2 = 0000 0001

Давайте разберемся с помощью программы.

#include <stdio.h>
intmain()
{
int a=7; // variable initialization
printf(«Значение a>> 2 равно: %d «, a>>2);
return 0;
}

Выход

Значение a>> 2 равно 1

Заключение

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *