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.