Побитовый оператор в программировании на C и C++

Опубликовано: 2022-12-09

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

Типы побитовых операторов в C и C++:

  1. Побитовое И
  2. Побитовое ИЛИ
  3. Побитовое НЕ
  4. Побитовое исключающее ИЛИ (XOR)
  5. Оператор левой смены
  6. Оператор правой смены

Давайте углубимся в детали каждого из них:

Оглавление

1. Побитовое И:

Побитовый оператор AND в C или C++ использует один амперсанд (&). Он принимает два числа в качестве операндов и выполняет И со всеми их битами. Результат равен 1, только если оба бита равны 1. Если любой из битов равен 0, результат равен 0. По сути, этот бинарный оператор в C и C++ выполняет логическое И битов в каждой позиции заданных двух чисел в бинарная форма.

Пример:

Предположим, что двоичное представление двух чисел a и b:

а = 01011000

б = 10111001

Итак, а & b = 00011000

Как видно из приведенного выше примера, результат показывает «1» только в тех местах, где оба числа a и b имеют 1. Во всех остальных местах результат показывает «0».

2. Побитовое ИЛИ:

В C и C++ побитовое ИЛИ работает аналогично побитовому И. Единственное отличие состоит в том, что в побитовом операторе ИЛИ для того, чтобы битовая позиция была равна «1» в результате, только один из двух битов должен быть «1». Этот оператор принимает два числа в качестве операндов и выполняет операцию ИЛИ над каждым битом этих двух чисел.

Это работает следующим образом:

  • Если оба бита равны «1», результат равен «1».
  • Если оба бита равны «0», результат равен «0».
  • Если какой-либо из битов равен «1», результат равен «1».

Это один из самых простых и наиболее часто используемых побитовых операторов C++. Его символ - труба |. Более того, он идентичен булевому логическому оператору ||.

Пример:

Предположим, что двоичное представление двух чисел a| б это:

а = 01101001

б = 10111000

Итак, а| б = 11111001

3. Побитовое НЕ:

Также известный как оператор побитового НЕ, он переворачивает каждый бит в результате. Его символ — тильда (~). Простой способ запомнить работу этого оператора состоит в том, что тильду иногда называют твиддлом, а побитовое дополнение переворачивает каждый бит. Это означает, что если у вас есть 1, результат равен 0, и наоборот. Другими словами, этот побитовый оператор в C и C++ принимает одно число и инвертирует все биты.

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

Пример:

беззнаковое целое число = ~ 0;

Здесь 0 означает все 0: 00000000. Таким образом, реализация оператора побитового НЕ дает результат в виде 1: 11111111. Поскольку num — это беззнаковое целое, вам не нужно беспокоиться о знаковых битах или дополнении до двух. 1с — максимально возможное число в результате.

Одной из важнейших характеристик оператора побитового НЕ является дополнение до 2. Дополнение числа до 2 равно дополнению этого числа плюс 1.

Пример:

а = 00000000

Таким образом, его дополнение до 2 = -(11111111+1) = -00000000 = -0 (десятичное число)

Примечание. Побитовое дополнение любого числа N равно -(N+1).

Изучайте онлайн-курсы по разработке программного обеспечения в лучших университетах мира. Участвуйте в программах Executive PG, Advanced Certificate Programs или Master Programs, чтобы ускорить свою карьеру.

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

Операция исключающее ИЛИ принимает два входа и выводит 1, если один или другой вход равен 1. Но результат равен 0, если оба входа равны 1. Если оба входа равны 0 или оба равны 1, результат равен 0. Результат XOR равен 1, только если два бита различны. Символом этого бинарного оператора в C и C++ является знак вставки (^). Более того, этот побитовый оператор в C и C++ сокращенно называется XOR. Он выполняет операцию исключающее ИЛИ для каждой пары битов. Важно отметить, что у этого оператора нет аналога логического оператора.

Пример:

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

а = 10101010

б = 01110010

Теперь а^б=10101010^01110010=11011000

Вы можете понять XOR следующим образом. Предположим, у вас есть какой-то бит, 0 или 1, который вы называете A. Теперь, когда вы возьмете XOR 0, вы получите A обратно. Итак, если A равно 1, вы получите 1, и наоборот. Когда вы берете XOR 1, это означает, что вы переворачиваете A. Итак, если A равно 1, вы получаете 0, и наоборот.

Если вы реализуете операцию побитового XOR дважды, т. е. у вас есть два бита, A и B, и вы устанавливаете C = A XOR B, затем выполните C XOR B. В этом случае вы получите результат A XOR B XOR C. Он либо переворачивает каждый бит A дважды, либо не переворачивает ни одного бита. Следовательно, вы просто возвращаете A как есть.

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

5. Оператор левой смены:

Этот побитовый оператор сдвигает все биты влево на определенное число указанных битов. Битовые позиции, которые были опустошены оператором сдвига влево, заполняются 0. Его символ — <<.

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

Синтаксис:

<<= 5

Вот пример программы C/C++ для реализации оператора сдвига влево:

основной ()

{

инт а = 5;

<<= 2;

count << "x :" << x << endl;

}

Выход: а = 20

Популярные курсы и статьи по программной инженерии

Популярные программы
Программа Executive PG в разработке программного обеспечения - IIIT B Программа сертификации блокчейна — PURDUE Программа сертификации кибербезопасности - PURDUE MSC в области компьютерных наук - IIIT B
Другие популярные статьи
Зарплата облачного инженера в США в 2021-2022 гг. Заработная плата архитектора решений AWS в США Зарплата бэкенд-разработчика в США Зарплата Front End Developer в США
Заработная плата веб-разработчика в США Вопросы на собеседовании Scrum Master в 2022 году Как начать карьеру в сфере кибербезопасности в 2022 году? Варианты карьеры в США для студентов инженерных специальностей

6. Оператор правой смены:

Этот побитовый оператор сдвигает все биты вправо на определенное число указанных битов. Его символ >>. В C или C++ этот оператор сначала берет два числа, сдвигает вправо биты первого операнда, а второй операнд указывает величину сдвига числа.

Синтаксис:

а >= 5

Пример программы C/C++ для реализации оператора сдвига вправо:

интервал основной () {

инт а = 5;

а >> = 2;

count << "x :" << x << endl;

}

Выход: а = 1

Популярные курсы и статьи по программной инженерии

Популярные программы
Программа Executive PG в разработке программного обеспечения - IIIT B Программа сертификации блокчейна — PURDUE Программа сертификации кибербезопасности - PURDUE MSC в области компьютерных наук - IIIT B
Другие популярные статьи
Зарплата облачного инженера в США в 2021-2022 гг. Заработная плата архитектора решений AWS в США Зарплата бэкенд-разработчика в США Зарплата Front End Developer в США
Заработная плата веб-разработчика в США Вопросы на собеседовании Scrum Master в 2022 году Как начать карьеру в сфере кибербезопасности в 2022 году? Варианты карьеры в США для студентов инженерных специальностей

Когда следует использовать побитовые операторы в C и C++?

  • Экономит место:

Побитовые операторы помогают экономить место. Одна из распространенных проблем, возникающих при работе на уровне отдельных битов, заключается в том, что если вам нужно больше места или сэкономить время, вам, возможно, придется перепроектировать огромные части вашей программы. Но использование побитовых операторов в C и C++ может устранить зависимости; например, вы можете использовать ~0, чтобы получить максимально возможное целое число. Битовый сдвиг для умножения на два является типичной операцией. Следовательно, это не влияет на удобочитаемость, в отличие от расширенного использования битовых манипуляций, которое может повлиять в некоторых случаях.

  • Шифрование:

Если вы работаете над каким-либо типом шифрования или в системе, в которой необходимо использовать битовые поля для хранения логических атрибутов.

Уникальные факты о побитовых операторах

  • Побитовое ИЛИ двух чисел — это просто сумма этих чисел, если не используется перенос. В противном случае вам просто нужно добавить их побитовое И. Например, предположим, что x = 5 (101) и y = 2 (010). Поскольку здесь нет переноса, сумма равна просто x|y. Но если мы теперь изменим «x» на 6 (110), сумма изменится на x|y + x&y, потому что теперь задействован перенос.
  • Побитовый оператор XOR является наиболее ценным с точки зрения технического интервью. Пример одной из задач интервью, связанных с этим, обсуждается здесь. «Для данного набора чисел, состоящего из всех элементов, встречающихся четное число раз, кроме одного числа, найдите нечетное число встречающихся». Вам нужно сделать XOR для всех чисел, чтобы решить эту проблему.
  • Побитовые операторы сдвига вправо и влево не должны использоваться для отрицательных чисел. Второй операнд, определяющий количество сдвигов, содержит отрицательное число, что приводит к неопределенному поведению в C и C++. Например, результаты как 1 >>- 1, так и 1 << -1 не определены.
  • Поведение не указано, если сдвиг числа превышает емкость целого числа. Например, 1 << 65 не указано, если целые числа хранятся в 64-битном формате.
  • Никакой операции сдвига не происходит, если второй операнд (тот, который определяет количество сдвигов) равен 0.

Начните свое путешествие в области компьютерных наук с UpGrad:

Если вы хотите подробно узнать о разработке внешнего интерфейса (JavaScript, HTML, CSS), внутреннего интерфейса (NoSQL-MongoDB) и микросервисов, вы можете пройти курс UpGrad Master of Science in Computer Science . Этот курс, предоставленный статусом выпускников IIIT Bangalore и LJMU, поможет вам построить карьеру инженера-программиста / разработчика полного стека в технологических гигантах по всему миру.

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

Для чего используются побитовые операторы в C++?

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

Можно ли использовать операторы сдвига влево и вправо вместе в коде?

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

Переворачивает ли дополнительный оператор всю последовательность кода?

Нет, это не так. Он переворачивает 1 и 0. Таким образом, все 1 становятся 0 и наоборот.

Почему другое название оператора побитового дополнения — оператор дополнения?

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