Страница 37 из 502
<b> static void Main() { </b>
<b> ushort num;</b>
<b> num = 10;</b>
<b> if((num & 1) == 1)</b>
<b> Console.WriteLine("He выводится.") ;</b>
<b> num = 11;</b>
<b> if((num & 1) == 1)</b>
<b> Console.WriteLine(num + " — нечетное число.");</b>
<b> }</b>
<b>}</b>
Вот как выглядит результат выполнения этой программы.
<b>11 — нечетное число.</b>
В обоих операторах if из приведенной выше программы выполняется поразрядная операция И над числовыми значениями переменной num и 1. Если младший двоичный разряд числового значения переменной num установлен, т.е. содержит двоичную 1, то результат поразрядной операции num & 1 оказывается равным 1. В противном случае он равен нулю. Поэтому оператор i f может быть выполнен успешно лишь в том случае, если проверяемое число оказывается нечетным.
Возможностью проверять состояние отдельных двоичных разрядов с помощью поразрядного оператора & можно воспользоваться для написания программы, в которой отдельные двоичные разряды проверяемого значения типа byte приводятся в двоичной форме. Ниже показан один из способов написания такой программы.
<b>// Показать биты, составляющие байт.</b>
<b>using System;</b>
<b>class ShowBits {</b>
<b> static void Main() { </b>
<b> int t; </b>
<b> byte val;</b>
<b> val = 123;</b>
<b> for(t=128; t > 0; t = t/2) {</b>
<b> if((val & t) != 0) </b><b>Console.Write("1 "); </b>
<b> if((val & t) == 0) Console.Write("0 ");</b>
<b> }</b>
<b> }</b>
<b>}</b>
Выполнение этой программы дает следующий результат.
<b>0 1 1 1 1 0 1 1</b>
В цикле for из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0.
Поразрядный оператор ИЛИ может быть использован для установки отдельных двоичных разрядов. Если в 1 установлен какой-нибудь бит в любом из операндов этого оператора, то в 1 будет установлен и соответствующий бит в другом операнде. Например:
<b> 1101 0011</b>
<b> 1010 1010</b>
<b>|_________</b>
<b> 1111 1011</b>
Используя поразрядный оператор ИЛИ, можно без особого труда превратить упоминавшийся выше пример программы, преобразующей нечетные числа в четные, в приведенный ниже обратный пример, где четные числа преобразуются в нечетные.
<b>// Применить поразрядный оператор ИЛИ, чтобы сделать число нечетным.</b>
<b>using System;</b>
<b>class MakeOdd {</b>
<b> static void Main() { </b>
<b> ushort num; </b>
<b> ushort i;</b>
<b> for(i = 1; i <= 10; i++) {</b>
<b> num = i;</b>
<b> Console.WriteLine("num: " + num); </b>
<b> num = (ushort) (num | 1);</b>
<b> Console.WriteLine("num после установки младшего разряда: " </b>
<b> + num + "n");</b>
<b> }</b>
<b> }</b>
<b>}</b>
Результат выполнения этой программы выглядит следующим образом.
<b>num: 1</b>
<b>num после установки младшего разряда: 1</b>
<b>num: 2</b>
<b>num после установки младшего разряда: 3</b>
<b>num: 3</b>
<b>num после установки младшего разряда: 3</b>
<b>num: 4</b>
<b>num после установки младшего разряда: 5</b>
<b>num: 5</b>
<b>num после установки младшего разряда: 5</b>
<b>num: 6</b>
<b>num после установки младшего разряда: 7</b>
<b>num: 7</b>
<b>num после установки младшего разряда: 7</b>
<b>num: 8</b>
<b>num после установки младшего разряда: 9</b>