Урок 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, Уроки по си шарп, си шарп, операторы




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Урок 1. Консоль JavaScript
Математика: векторы
Об авторе блога читающего программиста