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

Побитовые операторы в C: И, ИЛИ, XOR, сдвиги и дополнение — подробно

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

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

В C доступны следующие побитовые операторы:

ОператорЗначение
&Побитовое И (AND)
|Побитовое ИЛИ (OR)
^Побитовое XOR (исключающее ИЛИ)
~Побитовое НЕ (одноразрядное дополнение)
<<Левый сдвиг
>>Правый сдвиг

Побитовые операторы определены только для целочисленных типов; они неприменимы к типам с плавающей точкой как float или double.

Операции начинаются с наименее значащего бита (LSB) и идут к наиболее значащему (MSB). Следующая таблица истинности суммирует бинарные результаты:

Операнд xОперанд yx & yx | yx ^ y
00000
01011
10011
11110

В следующих разделах мы глубже рассмотрим каждый оператор с примерами.

Побитовое И (&)

Оператор И возвращает 1 только когда оба соответствующих бита — 1; иначе результат 0. Часто используется для маскирования ненужных битов.

 Op1 = 0000 1101 Op2 = 0001 1001 Result = 0000 1001 

Побитовое ИЛИ (|)

Оператор ИЛИ возвращает 1, если хотя бы один из бит — 1. Полезен для установки конкретных бит.

 Op1 = 0000 1101 Op2 = 0001 1001 Result = 0001 1101 

Побитовое XOR (^)

Оператор XOR возвращает 1 только когда биты различаются. Удобен для переключения бит.

 Op1 = 0000 1101 Op2 = 0001 1001 Result = 0001 0100 

Пример программы:

#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 - c = %d\n", c); c = a | b; /* 21 = 010101 */ printf("OR - c = %d\n", c); c = a ^ b; /* 1 = 000001 */ printf("XOR - c = %d\n", c); return 0; } 

Вывод:

 AND - c = 20 OR - c = 21 XOR - c = 1 

Операторы сдвига (<< и >>)

Операторы сдвига двигают биты влево или вправо на указанное количество.

Пример с 4-битным числом 1111:

 x << 2 → 1100 x >> 2 → 0011 

Программа-иллюстрация:

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

Вывод:

 Left shift - c = 80 Right shift - c = 5 

Побитовое дополнение (~)

Оператор дополнения инвертирует каждый бит: 1 становится 0 и наоборот. Это унарный оператор, применяемый к одному операнду.

 0000 1111 → 1111 0000 

Пример программы:

#include <stdio.h> int main() { int a = 10; /* 10 = 001010 */ int c = ~a; /* -11 в дополнительном коде */ printf("Complement - c = %d\n", c); return 0; } 

Вывод:

 Complement - c = -11 

Все операторы вместе

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

#include <stdio.h> int main() { unsigned int x = 48; /* 0011 0000 */ unsigned int y = 13; /* 0000 1101 */ int z = 0; z = x & y; /* 0 = 0000 0000 */ printf("AND - x & y = %d\n", z); z = x | y; /* 61 = 0011 1101 */ printf("OR - x | y = %d\n", z); z = x ^ y; /* 61 = 0011 1101 */ printf("XOR - x ^ y = %d\n", z); z = ~x; /* -49 = 1111 0100 (дополнительный код) */ printf("NOT - ~x = %d\n", z); z = x << 2; /* 192 = 1100 0000 */ printf("Left shift - x << 2 = %d\n", z); z = x >> 2; /* 12 = 0000 1100 */ printf("Right shift - x >> 2 = %d\n", z); return 0; } 

Результат:

 AND - x & y = 0 OR - x | y = 61 XOR - x ^ y = 61 NOT - ~x = -49 Left shift - x << 2 = 192 Right shift - x >> 2 = 12 

Ключевые выводы

Язык C

  1. Классы и объекты в C#: Фундаменты надёжного ООП
  2. Абстрактные классы и методы в C#: практическое руководство
  3. Частичные классы и методы в C#: понимание и применение
  4. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  5. Освоение операторов C++: полное руководство с практическими примерами
  6. Ключевые слова и идентификаторы в C: практическое руководство
  7. Операторы в C: исчерпывающее руководство
  8. IoT и блокчейн: смена парадигмы в доверии к данным и эффективности
  9. Операторы в C++: типы, примеры и практические программы
  10. Подробное руководство по операторам Python: арифметические, логические, сравнения, присваивания, битовые и прио…