Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4231

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Глава 3. Операторы и выражения 

41 

Например: 

  int x = 11, y = 3, z; 
  z = x % y;    /* z = 2 */ 

Отметим,  что  операндами  арифметических  операторов  могут 
быть  как  переменные,  так  и  литералы  арифметических  типов,  а 
результатом является R-value. 

3.3. Побитовые операторы 

Над  данными  интегрального  типа  определены  следующие 

поби-

товые операторы

 

<<

 — бинарный оператор сдвига влево; 

 

>>

 — бинарный оператор сдвига вправо; 

 

~

 — унарный оператор дополнения до 1 или отрицания; 

 

&

 — бинарный побитовый оператор И; 

 

|

 — бинарный побитовый оператор ИЛИ; 

 

^

 — бинарный побитовый оператор исключающее ИЛИ. 

Операндами побитовых операторов могут быть как переменные, 
так и литералы, а результатом является R-value. Опишем подроб-
нее работу побитовых операторов. 
Побитовая операция 

x<<n

 сдвигает двоичное представление числа 

x

 на 

n

 разрядов влево. При этом биты, освобождающиеся справа, 

заполняются нулями. Например, 

  short x = 0x0001, y; 
  y = x << 1;    /* y = 0x0002 */ 

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

x>>n

 сдвигает двоичное представление числа 

x

 на 

n

 разрядов вправо. Если число без знака, то освобождающие-

ся слева биты заполняются нулями. Если же число 

x

 имеет знак, 


background image

Часть I. Язык программирования С 

42 

то  освобождающиеся  слева  биты  заполняются  копией  знакового 
бита. Например: 

  short x = 0x0004, y; 
  y = x >> 2;    /* y = 0x0001 */ 

Сдвиг вправо на один бит эквивалентен делению левого операнда 
на 2. 

 

Если  второй  операнд  оператора  сдвига  является  отрицательным 
числом, то результат оператора сдвига не определен. 

Побитовая операция 

~x

  инвертирует  битовое  представление  чис-

ла 

x

. То есть над битами числа 

x

 выполняются следующие преоб-

разования: 

 

~0 = 1

 

~1 = 0

Например: 

  short x = 0x000F, y; 
  y = ~x;      /* y = 0xFFF0 */ 

Побитовая операция 

x&y

 выполняет над соответствующими бита-

ми  чисел 

x

  и 

y

  логическую  операцию  И.  То  есть  над  соответст-

вующими битами операндов выполняются следующие действия: 

 

0 & 0 = 0

 

0 & 1 = 0

 

1 & 0 = 0

 

1 & 1 = 1

Например: 

  int x = 0x001F, y = 0x00F0, z; 
  z = x & y;      /* z = 0x0010 */ 

Побитовая операция 

x|y

 выполняет над соответствующими бита-

ми  чисел 

x

  и 

y

  логическую  операцию  ИЛИ.  То  есть  над  соот- 

ветствующими  битами  операндов  выполняются  следующие  дей-
ствия: 


background image

Глава 3. Операторы и выражения 

43 

 

0 | 0 = 0

 

0 | 1 = 1

 

1 | 0 = 1

 

1 | 1 = 1

Например: 

  int x = 0x000F, y = 0x00F0, z; 
  z = x | y;        /* z = 0x00FF */ 

Побитовая операция 

x^y

 выполняет над соответствующими бита-

ми чисел 

x

 и 

y

 логическую операцию исключающее ИЛИ. То есть 

над соответствующими битами операндов выполняются следую-
щие действия: 

 

0 ^ 0 = 0

 

0 ^ 1 = 1

 

1 ^ 0 = 1

 

1 ^ 1 = 0

Например: 

  int x = 0x00FF, y = 0x0FF0, z; 
  z = x ^ y;      /* z = 0x0F0F */ 

3.4. Операторы сравнения 

В языке программирования C нет логических или булевых типов 
данных.  Вместо  этого  считается,  что  любое  ненулевое  значение 
является истинным, а равное нулю — ложным. Операторы срав-
нения и логические операторы просто вычисляют значение типа 

int

, которое равно 

0

 или 

1

, в зависимости от значений операндов. 

В языке программирования С определены следующие 

операторы 

сравнения

 

<

— бинарный оператор меньше; 

 

>

 — бинарный оператор больше; 

 

<=

 — бинарный оператор не больше; 


background image

Часть I. Язык программирования С 

44 

 

>=

 — бинарный оператор не меньше; 

 

==

 — бинарный оператор равно; 

 

!=

 — бинарный оператор не равно. 

Например,  над  двумя  целыми  числами  можно  выполнить  сле-
дующие операторы сравнения: 

  int x = -1; y = 0, z; 
  z = x < y;     /* z = 1 */ 
  z = x > y;     /* z = 0 */ 
  z = x <= y;    /* z = 0 */ 
  z = x >= y;    /* z = 0 */ 
  z = x == y;    /* z = 0 */ 
  z = x != y;    /* z = 1 */ 

Операндами  операторов  сравнения  могут  быть  переменные  и  
литералы  арифметических  типов  и  указатели,  о  которых  будет 
рассказано  далее.  Результатом  оператора  сравнения  является  
R-value. 

3.5. Логические операторы 

Логические операторы

 выполняют над своими операндами логи-

ческие операции НЕ, И и ИЛИ, учитывая при этом, что любое не 
равное нулю значение считается истинным, а равное нулю значе-
ние —  ложным.  В  языке  программирования  C  определены  сле-
дующие логические операторы: 

 

!

 — унарный оператор логического отрицания; 

 

&&

 — бинарный оператор логическое И; 

 

||

 — бинарный оператор логическое ИЛИ. 

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


background image

Глава 3. Операторы и выражения 

45 

  int x = -1, y = 0, z; 
  z = !x;        /* z = 0 */ 
  z = x && y;    /* z = 0 */ 
  z = x || y;    /* z = 1 */ 

3.6. Выражения 

Выражением

  называется  синтаксически  правильно  построенная 

последовательность  операторов  и  их  операндов.  Под  словами 

синтаксически  правильная  последовательность  понимается,  что 

каждому  оператору  поставлены  в  соответствие  операнды,  кото-

рые в свою очередь тоже могут быть выражениями. Из этого оп-

ределения  следует,  что  выражения  строятся  рекурсивно  и  могут 

содержать несколько операторов. Ниже приведены примеры пра-

вильного и ошибочного выражений: 

  x + y * z    /* правильное выражение */ 
  x + y %% z   /* ошибочное выражение  */ 

Приоритетом  оператора

  (operator  precedence)  называется  оче-

редность  вычисления  оператора  в  выражении,  содержащем  не-

сколько  операторов.  Операторы,  рассмотренные  в  предыдущих 

разделах,  имеют  следующие  приоритеты,  которые  расположены 

по убыванию: 

 

! ~ - +

 — унарные операторы; 

 

*  /  %

 —  бинарные  мультипликативные  арифметические  опе-

раторы; 

 

+ -

 — бинарные аддитивные арифметические операторы; 

 

<< >>

 — бинарные операторы сдвига влево и вправо; 

 

< > <= >=

 — бинарные операторы сравнения на неравенство; 

 

== !=

 — бинарные операторы сравнения на равенство; 

 

&

 — бинарный побитовый оператор И; 

 

^

 — бинарный побитовый оператор исключающее ИЛИ; 

 

|

 — бинарный побитовый оператор ИЛИ; 

 

&&

 — бинарный логический оператор И; 

 

||

 — бинарный логический оператор ИЛИ. 


Смотрите также файлы