|
Программирование >> Программирование с использованием ajax
Таблица 4.8. Использование битов для сохранения цветов
Предположим, что все эти значения сохраняются в переменной типа 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. Поразрядные операции и Операция Категория Пример выражения Результат
Эти операции, которые еще также часто называют поразрядными операциями сдвига, лучше всего проиллюстрировать на коротком примере: 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. Булевские операции присваивания
У поразрядных операций сдвига тоже имеются операции присваивания, которые перечислены в табл. 4.11. Таблица 4.11. Операции присваивания для поразрядных операций сдвига
Теперь подошла пора примера. В следующем практическом занятии показан код, приглашающий ввести целое число и затем выполняющий над этим числом различные булевские вычисления. Практическое занятие Применение булевских и поразрядных операций 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
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |