Поразрядным оператором И удобно также пользоваться для определения установленного или сброшенного состояния отдельного двоичного разряда. В следующем примере программы определяется, является ли число нечетным.
// Применить поразрядный оператор И, чтобы определить,
// является ли число нечетным.
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 ");
}
}
}
Выполнение этой программы дает следующий результат.
01111011
В цикле for из приведенной выше программы каждый бит значения переменной val проверяется с помощью поразрядного оператора И, чтобы выяснить, установлен ли этот бит или сброшен. Если он установлен, то выводится цифра 1, а если сброшен, то выводится цифра 0.
Поразрядный оператор ИЛИ может быть использован для установки отдельных двоичных разрядов. Если в 1 установлен какой-нибудь бит в любом из операндов этого оператора, то в 1 будет установлен и соответствующий бит в другом операнде. Например:
1101 ООН
* 10101010
11111011
Используя поразрядный оператор ИЛИ, можно без особого труда превратить упоминавшийся выше пример программы, преобразующей нечетные числа в четные, в приведенный ниже обратный пример, где четные числа преобразуются в нечетные.
// Применить поразрядный оператор ИЛИ, чтобы сделать число нечетным.
using System;
class MakeOdd {
static void Main() { ushort num; ushort i;
for(i = 1; i <= 10; i++) {
num = i;
Console.WriteLine("num: " + num); num = (ushort) (num | 1);
Console.WriteLine("num после установки младшего разряда: " + num + "\n");
}
}
}
Результат выполнения этой программы выглядит следующим образом.
num: 1
num после установки младшего разряда: 1
num: 2
num
после
установки
младшего
разряда:
3
num:
num
: 3
после
установки
младшего
разряда:
3
num:
num
: 4
после
установки
младшего
разряда:
5
num:
num
: 5
после
установки
младшего
разряда:
5
num:
num
: 6
после
установки
младшего
разряда:
7
num:
num
: 7
после
установки
младшего
разряда:
7
num: num
: 8
после
установки
младшего
разряда:
9
num: num
: 9
после
установку
младшего
разряда:
9
num: num
: 10 после
установки
младшего
разряда:
11
Читать дальше