C# 4.0: полное руководство | страница 70
>
>num: 5
>num после сброса младшего разряда: 4
>num: 6
>num после сброса младшего разряда: 6
>num: 7
>num после сброса младшего разряда: 6
>num: 8
>num после сброса младшего разряда: 8
>num: 9
>num после сброса младшего разряда: 8
>num: 10
>num после сброса младшего разряда: 10
Шестнадцатеричное значение 0xFFFE, используемое в поразрядном операторе И, имеет следующую двоичную форму: 1111 1111 1111 1110. Таким образом, поразрядная операция И оставляет без изменения все двоичные разряды в числовом значении переменной num, кроме младшего разряда, который сбрасывается в нуль. В итоге четные числа не претерпевают никаких изменений, а нечетные уменьшаются на 1 и становятся четными.
Поразрядным оператором И удобно также пользоваться для определения установленного или сброшенного состояния отдельного двоичного разряда. В следующем примере программы определяется, является ли число нечетным.
>// Применить поразрядный оператор И, чтобы определить,
>// является ли число нечетным.
>using System;
>class IsOdd {
> static void Main() {
> ushort num;
> num = 10;
> if((num & 1) == 1)
> Console.WriteLine("He выводится.") ;
> num = 11;
> if((num & 1) == 1)
> Console.WriteLine(num + " — нечетное число.");
> }
>}
Вот как выглядит результат выполнения этой программы.
>11 — нечетное число.
В обоих операторах if из приведенной выше программы выполняется поразрядная операция И над числовыми значениями переменной num и 1. Если младший двоичный разряд числового значения переменной num установлен, т.е. содержит двоичную 1, то результат поразрядной операции num & 1 оказывается равным 1. В противном случае он равен нулю. Поэтому оператор i f может быть выполнен успешно лишь в том случае, если проверяемое число оказывается нечетным.
Возможностью проверять состояние отдельных двоичных разрядов с помощью поразрядного оператора & можно воспользоваться для написания программы, в которой отдельные двоичные разряды проверяемого значения типа byte приводятся в двоичной форме. Ниже показан один из способов написания такой программы.
>// Показать биты, составляющие байт.
>using System;
>class ShowBits {
> static void Main() {
> int t;
> byte val;
> val = 123;
> for(t=128; t > 0; t = t/2) {
> if((val & t) != 0)
>Console.Write("1 ");
> if((val & t) == 0) Console.Write("0 ");
> }
> }
>}
Выполнение этой программы дает следующий результат.
>0 1 1 1 1 0 1 1
В цикле >for
из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0.