Битовые операторы | Кодкамп

Процессоры

Битовые операторы

Редакция Кодкампа

Введение

Примеры

Побитовое И

& Оператор выполнит двоичный И, где бит копируется , если она существует в обоих операндов. Это означает:

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

| Оператор выполнит двоичное «или», где бит копируется, если он существует в любом из операндов. Это означает:

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

^ Оператор будет выполнять двоичный XOR , в котором двоичный 1 копируется тогда и только тогда , когда это значение ровно один операнд. Другой способ задания этого является то , что результат 1 только если операнды разные. Примеры включают в себя:

Побитовый сдвиг влево

оператор выполняет побитовое «сдвиг влево» , где значение левого операнда перемещается влево на число битов данных в правом операнде.

Выполнение левого разрядное смещение 1 эквивалентно умножению на 2 :

Выполнение левого разрядного смещения n эквивалентно умножения на 2**n :

Побитовый сдвиг вправо

>> оператор выполняет побитовое «сдвиг вправо» , где значение левого операнда перемещается вправо на число битов данных в правом операнде.

Выполнение правильного битового смещения 1 эквивалентно целочисленного деления на 2 :

Выполнение правильного битового смещения n эквивалентно целочисленное деление на 2**n :

Побитовое НЕ

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

Это означает , что если вы используете 8 бит для представления номера вашего дополнительного кода комплемента, вы бы относиться к модели от 0000 0000 до 0111 1111 для представления чисел от 0 до 127 и резервного 1xxx xxxx для представления отрицательных чисел.

Восьмиразрядные числа с двумя дополнительными числами

Биты Значение без знака Значение двух дополнений 0000 0000 0 0 0000 0001 1 1 0000 0010 2 2 0111 1110 126 126 0111 1111 127 127 1000 0000 128 -128 1000 0001 129 -127 1000 0010 130 -126 1111 1110 254 -2 1111 1111 255 -1

По существу, это означает , что в то время как 1010 0110 имеет беззнаковое значение 166 (прибыл в путем добавления (128 * 1) + (64 * 0) + (32 * 1) + (16 * 0) + (8 * 0) + (4 * 1) + (2 * 1) + (1 * 0) ), оно имеет значение дополнительного код дополнение -90 (прибыли в добавлении (128 * 1) — (64 * 0) — (32 * 1) — (16 * 0) — (8 * 0) — (4 * 1) — (2 * 1) — (1 * 0) , и дополняя значение).

Таким образом, отрицательные числа в диапазоне до -128 ( 1000 0000 ). Ноль (0) представляется в виде 0000 0000 , и минус один (-1) , как 1111 1111 .

В целом, однако, это означает ,

Обратите внимание, что общий эффект этой операции при нанесении на положительные числа можно суммировать:

И затем, применительно к отрицательным числам, соответствующий эффект:

Следующие примеры иллюстрируют это последнее правило .

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

Язык C

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример

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

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

Выход

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

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

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

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

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

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

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

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

Выход

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

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

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

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

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

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

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

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

Выход

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

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

Побитовый оператор дополнения также известен как оператор дополнения. Он представлен символом тильда (

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

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

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

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

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

#include
int main()
<
inta=8; // variable declarations
printf(«Выход побитового оператора дополнения

Выход

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

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

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

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

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

Operand
int main()
<
int a=5; // variable initialization
printf(«The value of a > n;

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

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

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

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

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

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

Выход

Заключение

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

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

https://codecamp.ru/blog/python-bitwise-operators/

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

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

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

Related Posts