Поразрядные (побитовые) операции

Их можно производить с любыми целыми числами, переменными и константами. Их нельзя использовать с переменными типа float, double, long double.Поразрядными операциями являются:

& AND (и),

| OR (или),

^ XOR,

~ NOT (не),

<< сдвиг влево,

>> сдвиг вправо.

Операции AND, OR, NOT, XOR полностью соответствуют аналогичным логическим операциям. Поразрядные операции позволяют, в частности, обеспечить доступ к любому биту информации. Часто эти операции используют в драйверах устройств, программах, связанных с принтером, модемом и другими устройствами.

При выполнении поразрядной операции над двумя переменными, например типа char, операция производится над каждой парой соответствующих разрядов. Отличие поразрядных операций от логических и операций отношения состоит в том, что логическая операция и операция отношения всегда дают в результате 0 или 1. Для поразрядных операций это не так.

Приведем следующий пример:

Если надо установить значение старшего разряда переменной типа char равным нулю, то удобно применить операцию &(and).

ch = ch & 127;

Пусть ch = ’A’

‘A’ в двоичном коде: 11000001;

127 в двоичном коде: 01111111

‘A’ & 127: 01000001.

Если мы хотим установить для старшего разряда 1, удобна операция OR (или)

ch = ch | 128

‘A’ 11000001

127 10000000

‘A’ | 128 11000001.

Поразрядные операции удобны для хранения в сжатом виде информации о состоянии on/off (вкл/выкл). В одном байте можно хранить 8 таких флагов.

Операция сдвига. Форма представления:

value >> число позиций; value<< число позиций.

Пример. Двоичное представление числа х = 9: 00001001.

Тогда x = 9<<3: 01001000,

x = 9>>3 : 00000001.

Пример. Пусть unsigned char x = 255 в двоичном виде 11111111.

Значения выражения сдвига будут иметь вид:

Х = х<<3: 11111000

Х = х>>3: 00011111

X = x>>5: 00000111.

Управляющие конструкции языка Си

Организация ветвящихся процессов: оператор if

Программа - это описание средствами языка программирования алгоритма решения задачи. Любой алгоритм можно разделить на следования, ветвления и циклы. В простейшем случае имеют место только следования.

Если имеет место проверка условий и выбор одного из возможных направлений продолжения вычислений, то имеет место ветвление (Рис.2.1).

       
    Поразрядные (побитовые) операции - student2.ru
 
  Поразрядные (побитовые) операции - student2.ru

Да Нет

       
  Поразрядные (побитовые) операции - student2.ru   Поразрядные (побитовые) операции - student2.ru

Рис.3.1

Ветвления в программах осуществляются с помощью оператора условия if. Этот оператор используется в двух формах:

а) в полной форме:

if(выражение) (if - если, else - иначе)

оператор_1;

Else

оператор_2;

Правило выполнения: если выражение в скобках (здесь некоторое условие) не равно нулю, т.е. “истина”, то выполняется оператор_1. В противном случае выполняется оператор_2.

б) в сокращенной форме:

if (выражение)

оператор_1;

Если выражение в скобках (…) не равно нулю, то выполняется оператор_1, в противном случае управление передается следующему оператору программы.

Операторы_1 и _2 могут быть как простыми, так и составными. В последнем случае группа операторов должна заключаться в фигурные скобки:

{

оператор_1;

оператор_2;

…………

оператор_n;

}.

Каждый оператор внутри скобок должен заканчиваться “;”.

Пример 3.1:

# include <conio.h>

void main ( void)

{

clrscr ();

float a, b, rez ;

printf (“Введите значение а и b: “);

scanf (“%f %f “, &a, &b);

if (b= =0)

printf (“Отношение a / b не определено \n “);

Else

{

rez = a / b;

printf (“Отношение a / b равно %6, 3f\n”, rez);

}

getch( );

}

Еще один фрагмент:

. . . . . . . . .

if ( (ch = getch( ) )= =’g’)

puts (“Конец работы \n”);

Else

puts (“Работа продолжается \n”);

Выражение после слова if может состоять из нескольких операций присваивания, разделяемых запятыми. Значение всего выражения будет определяться последним присваиванием. Это справедливо для любого составного выражения. Например:

if (с=сh,ch=getch( ) ).

Наши рекомендации