Читаем C# 4.0: полное руководство полностью

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.

Поразрядный оператор ИЛИ может быть использован для установки отдельных двоичных разрядов. Если в 1 установлен какой-нибудь бит в любом из операндов этого оператора, то в 1 будет установлен и соответствующий бит в другом операнде. Например:


 1101 0011

 1010 1010

|_________

 1111 1011


Используя поразрядный оператор ИЛИ, можно без особого труда превратить упоминавшийся выше пример программы, преобразующей нечетные числа в четные, в приведенный ниже обратный пример, где четные числа преобразуются в нечетные.


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

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: 3

num после установки младшего разряда: 3


num: 4

num после установки младшего разряда: 5


num: 5

num после установки младшего разряда: 5


num: 6

num после установки младшего разряда: 7


num: 7

Перейти на страницу:

Похожие книги

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных