Добавить в цитаты Настройки чтения

Страница 37 из 502

<b>  static void Main() { </b>

<b>    ushort num;</b>

<b>    num = 10;</b>

<b>    if((num &amp; 1) == 1)</b>

<b>      Console.WriteLine(&quot;He выводится.&quot;) ;</b>

<b>    num = 11;</b>

<b>    if((num &amp; 1) == 1)</b>

<b>      Console.WriteLine(num + &quot; — нечетное число.&quot;);</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 &gt; 0; t = t/2) {</b>

<b>      if((val &amp; t) != 0) </b><b>Console.Write(&quot;1 &quot;); </b>

<b>      if((val &amp; t) == 0) Console.Write(&quot;0 &quot;);</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 &lt;= 10; i++)    {</b>

<b>      num = i;</b>

<b>      Console.WriteLine(&quot;num: &quot; + num); </b>

<b>      num = (ushort) (num | 1);</b>

<b>      Console.WriteLine(&quot;num после установки младшего разряда: &quot; </b>

<b>                 + num + &quot;n&quot;);</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>