Чтение онлайн

ЖАНРЫ

C# 4.0 полное руководство - 2011

Шилдт Герберт

Шрифт:

// Применить поразрядный оператор И, чтобы сделать число четным.

using System;

class MakeEven {

static void Main { ushort num; ushort i;”

for(i =1; i <= 10; i++) {

num = i;

Console.WriteLine("num: " + num); num = (ushort) (num & OxFFFE);

Console.WriteLine("num после сброса младшего разряда: "

+ num + "\n");

}

}

}

Результат выполнения

этой программы приведен ниже.

num: 1

num после сброса младшего разряда: О num: 2

num после сброса младшего разряда: 2 num: 3

num после сброса младшего разряда: 2 num: 4

num после сброса младшего разряда: 4 num: 5

num после сброса младшего разряда: 4 num: 6

num после сброса младшего разряда: 6 num: 7

num после сброса младшего разряда: 6 num: 8

num после сброса младшего разряда: 8 num: 9

num после сброса младшего разряда: 8 num: 10

num после сброса младшего разряда: 10

Шестнадцатеричное значение OxFFFE, используемое в поразрядном операторе И, имеет следующую двоичную форму: 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 ");

}

}

}

Выполнение этой программы дает следующий результат.

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

после

<
Поделиться с друзьями: