Урок 10. Операторы побитового сдвига C#
Все уроки по C# расположены здесь
На этом уроке мы продолжим обзор побитовых операторов C#, вводя функции сдвига. Эти операторы расширяют возможности C# для обработки двоичной информации.
Введение
На предыдущем уроке я ввел логические побитовые операторы, описывая, как эти операторы могут быть использованы для извлечения и изменения отдельных битов в целое число. Побитовое множество операторов завершается после понимания операторов сдвига.
Оператор Shift Left (сдвиг влево)
Операторы сдвига позволяют программистам корректировать целое число, перемещая все его биты влево или вправо. Следующая диаграмма показывает влияние смещения значения влево на одну цифру.
Как вы можете видеть, каждый бит перемещается влево,а младший бит становится нулевым. Так как это бинарная операция, эффект сдвига влево состоит в том, чтобы удвоить значение. На самом деле, этот метод часто используется для выполнения некоторых умножения, как это может быть быстрее, чем при использовании арифметического умножения.
В C# оператор shift left представлен в виде на два меньше (<<). Оператор может быть использован для сдвига двоичного числа на одну или несколько цифр. Количество цифр указывается после оператора, как в следующем коде
uint value = 15; // 00001111 uint doubled = value << 1; // результат = 00011110 = 30 uint shiftFour = value << 4; // результат = 11110000 = 240Сдвиг вправо
Оператор shift right обеспечивает обратный сдвиг влево, перемещая каждый бит вправо на количество цифр. C# использует два знака больше, чем (>>) для оператора.
uint value = 240; // 11110000 uint halved = value >> 1; // результат = 01111000 = 120 uint shiftFour = value >> 4; // результат = 00001111 = 15Биты переполнения
При использовании функции сдвига, один бит, который называется переполнением разрядной, будет смещен за пределы двоичного значения. Значение этой цифры теряется во время операции и не может быть восстановлено. Если значение бита важно, то оно должно быть проверено перед сдвигом с помощью логического побитового оператора. Данные переполнения потери важны, если операции сдвига используются для умножения или деления, чтобы обеспечить правильный результат
uint value = 15; // 00001111 uint halved = value >> 1; // результат = 00000111 = 7Целые числа
Как указывалось в предыдущей статье, целые числа со знаком используют бит высшего порядка, чтобы определить, является ли значение положительным или отрицательным, и что остальные биты используют дополнительную запись two для отрицательных значений. Для этого C# игнорирует бит для подписанных типов данных и соответственно смещает отрицательные значения. Таким образом, сдвиг работает на положительные и отрицательные значения.
int value = -240; int halved = value >> 1; // результат = -120Составные операторы присваивания
Операторы сдвига имеют эквиваленты для составного назначения, подобные другим операторам, описанным в этом учебном курсе. Они используются путем добавления знака равенства к оператору и использования числа битов для сдвига в качестве операнда. В следующем примере показано их использование
int value = 240; value >>= 2; // результат = 60 value <<= 1; // результат = 120Предыдущий: Урок 9. Логические побитовые операторы C# | Следующий: Урок 11. Операторы сравнения в C#
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.