Программирование >>  Программирование с использованием ajax 

1 ... 20 21 22 [ 23 ] 24 25 26 ... 396


Таблица 4.8. Использование битов для сохранения цветов

Биты

Десятичное

Значение

представление

Черный (black)

Красный (red)

Зеленый (green)

Голубой (blue)

Пурпурный (magenta)

Желтый (yellow)

Светло-голубой (cyan)

Белый (white)

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

int myColor = 0; bool containsRed; myColor = myColor I

myColor = myColor 4;

containsRed = (myColor & 4) ==

Добавление бита, представляющего зеленый цвет, в результате которого в myColor теперь сохраняется значение 010 Добавление бита, представляющего красный цвет, в результате которого в myColor теперь сохраняется значение 110 4; Проверка значения бита, представляющего красный цвет

В последней строке приведенного кода containsRed будет присваиваться значение true, поскольку бит, представляющий красный цвет в myColor, действительно равен 1. Такой прием может оказаться довольно полезным для эффективного использования информации, поскольку задействованные операции могут применяться для проверки значений сразу множества битов одновременно (всех 32 битов в случае значений типа int). Однако существуют и более удобные способы для хранения дополнительной информации в одиночных переменных (подразумевающих использование дополнительных типов переменных, о которых более подробно будет рассказываться позже в этой главе).

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

Таблица 4.9. Поразрядные операции и

Операция Категория Пример выражения

Результат

>>

Бинарная

varl = var2 var3;

varl присваивается значение, получаемое после сдвига вправо двоичного содержимого var2 на указанное в var3 количество разрядов

<<

Бинарная

varl = var2 var3;

varl присваивается значение, получаемое после сдвига влево двоичного содержимого var2 на указанное в var3 количество разрядов



Эти операции, которые еще также часто называют поразрядными операциями сдвига, лучше всего проиллюстрировать на коротком примере:

int varl, var2 = 10, var3 = 2; varl = var2 << var3;

Здесь переменной varl будет присвоено значение 4 0. Объяснить это можно, вспомнив, что в двоичном представлении 10 выглядит как 1010, но после сдвига на две позиции влево оно превратится в 101000, что уже является двоичным представлением числа 40. По сути, получается, что будет выполняться операция умножения. Каждый сдвиг влево на один бит приводит к умножению на 2, а это значит, что сдвиг на два бита влево вызовет умножение на 4. Аналогично сдвиг на один бит вправо будет приводить к делению операнда на 2, причем остаток этого деления будет отбрасываться:

int varl, var2 = 10; varl = var2 >> 1;

В данном примере в переменной varl будет содержаться значение 5, а после выполнения следующего кода она получит значение 2:

int varl, var2 = 10; varl = var2 2;

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

Булевские операции присваивания

Последними в этом разделе рассматриваются операции, позволяющие объединять некоторые из рассмотренных ранее операций с помощью знака присваивания, во многом подобно математическим операциям присваивания (вроде +=, *= и т.д.), о которых рассказывалось в предыдущей главе. Все эти операции перечислены в табл. 4.10.

Эти операции работают с булевскими и числовыми значениям тем же образом, что операции &, и .

Обратите внимание, что операции &=и \ = подразумевают использование операций & и \ , ане & & и I \ , и на то, что ассоциируемые с ними накладные расходы выглядят точно так же, как и у этих более простых операций.

Таблица 4.10. Булевские операции присваивания

Операция

Категория

Пример выражения

Результат

&=

Бинарная

varl &= var2;

varl присваивается значение, получаемое в результате выполнения операции varl & var2

Бинарная

varl 1 = var2;

varl присваивается значение, получаемое в результате выполнения операции varl 1 var2

Бинарная

varl = var2;

varl присваивается значение, получаемое в результате выполнения операции varl var2



У поразрядных операций сдвига тоже имеются операции присваивания, которые перечислены в табл. 4.11.

Таблица 4.11. Операции присваивания для поразрядных операций сдвига

Операция

Категория

Пример выражения

Результат

Унарная

varl = var2;

varl присваивается значение, получаемое после сдвига вправо двоичного содержимого varl на указанное в var2 количество разрядов

<<=

Унарная

varl <<= var2;

varl присваивается значение, получаемое после сдвига влево двоичного содержимого varl на указанное в var2 количество разрядов

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

Практическое занятие

Применение булевских и поразрядных операций

1. Создайте новое консольное приложение по имени Ch04Ex01 и сохраните его в каталоге C:\BegVCSharp\Chapter04.

2. Добавьте в файл Program.cs следующий код:

static void Main(string [ ] args)

Console.WriteLine ( Enter an integer: ); Введите целое число

int mylnt = Convert.ToInt32 (Console.ReadLine()); Console.WriteLine( Integer less than 10? {0} , mylnt < 10); Это целое число меньше 10?

Console. WriteLine ( Integer between 0 and 5? {0} , (0 <= mylnt) && (mylnt <= 5));

Это целое число находится в диапазоне между О and 5?

Console.WriteLine( Bitwise AND of Integer and 10 = {0} , mylnt & 10);

Результат выполнения поразрядной операции И для указанного целого числа и 10

Console.ReadKeyО ;

3. Запустите это приложение, и после появления соответствующего приглашения введите какое-нибудь целое число. На рис. 4.1 показан результат, который должен получиться.


Рис, 4.1. Результат выполнения приложения Ch04Ex01



1 ... 20 21 22 [ 23 ] 24 25 26 ... 396

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика