Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Поразрядные операторы

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

Логические операторы используются для повышения выразительных средств языка. В языке Си имеются три логических оператора:

●! – логическое НЕ,

● && - логическое И,

● || - логическое ИЛИ.

Оператор! является унарным оператором, а операторы && и || - бинарными. В качестве операндов логических операторов могут использоваться арифметические выражения, отношения и сравнения на равенство. Логические операции задаются с помощью так называемых таблиц истинности. Предположим, что имеются две логические величины a, b. Тогда таблицы истинности для рассматриваемых операторов можно представить в следующем виде:

a b Логическая операция
!a !b a && b a || b
false false true true false false
false true true false false true
true false false true false true
true true false false true true

 

Значение результата выполнения оператора! является обратным по отношению к его операнду. Значение, полученное в результате выполнения оператора &&, истинно только в том случае, когда истинны его оба операнда. Значение результата выполнения оператора || истинно в том случае, когда истинен хотя бы один операнд. Отметим, что бинарные операторы относятся к немногочисленной категории операторов, для которых фиксирован порядок вычисления операндов. Этот порядок выполнения состоит в следующем. Вначале всегда вычисляется левый операнд. Если после его вычисления значение выражения становится очевидным, то правый операнд не вычисляется. Например, если при вычислении выражения, содержащего оператор &&, значение левого операнда оказалось равным false, то из этого заведомо следует, что значением всего выражения будет логическое значение false. При этом необходимость в вычислении правого операнда отпадает.

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

● ~ поразрядное НЕ,

● & поразрядное И,

● | поразрядное ИЛИ,

● ^ поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ,

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

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

Отметим, что поразрядные операторы применимы только к целочисленным операндам.

Краткое описание поразрядных операторов содержится в таблице, приведенной ниже.

 

Оператор Название Описание
~ Поразрядное НЕ Все биты операнда, равные 0, устанавливаются в 1, а все биты, значения которых равны 1, устанавливаются в 0.
& Поразрядное И Бит результата устанавливается в 1 только в том случае, когда соответствующие биты обоих операндов установлены в 1, во всех других случаях этот бит устанавливается в 0.
| Поразрядное ИЛИ Бит результата устанавливается в 1 в том случае, когда хотя бы один из соответствующих битов операндов установлен в 1 и устанавливается в 0, если оба соответствующих бита, установлены в 0.
^ Поразрядное ИСКЛЮЧАЮЩЕЕ ИЛИ Бит результата устанавливается в 1, если соответствующий бит одного и только одного операнда установлен в 1, во всех других случаях этот бит устанавливается в 0.
<< Сдвиг влево Сдвигает влево биты левого операнда на количество позиций, которое определяется правым операндом. Правые освобождающиеся позиции заполняются нулями.
>> Сдвиг вправо Сдвигает вправо биты левого операнда на количество позиций, которое определяется правым операндом. Способ заполнения освобождающихся позиций является аппаратно – зависимым.

 

Пусть имеется следующий фрагмент программы, содержащий выражения, использующие поразрядные операции.

/*.....................*/
unsigned char n = 0x2A;
unsigned char m = 0x71;
unsigned char r;


r = ~n;
printf("~n = %X\n", r);

r = ~m;
printf("~m = %X\n", r);

r = n & m;
printf("n & m = %X\n", r);

r = n | m;
printf("n | m = %X\n", r);

r = n << 2;
printf("n << 2 = %X\n", r);

r = m >> 1;
printf("m >> 1 = %X\n", r);
/*........................*/

Результаты выполнения этого фрагмента программы имели следующий вид:

~n = D5
~m = 8E
n & m = 20
n | m = 7B
n << 2 = A8
m >> 1 = 38

 

19. Условные выражения (оператор?:)

Условные выражения записываются с помощью тернарного оператора?:. Этот оператор имеет следующий формат:

выр1? выр2: выр3

Здесь выр1, выр2 и выр3 – выражения.

Условное выражение вычисляется следующим образом. Вначале оценивается булевское значение выражения выр1. Если его значением является true, то дальше вычисляется значение выражения выр2 и значение этого выражения становится значением всего условного выражения, в противном случае вычисляется значение выражения выр3 и его значение становится значением всего условного выражения.

В качестве примера применения условного выражения рассмотрим задачу о нахождении наибольшего значения двух вещественных чисел a и b. Ниже приведена программа, предназначенная для решения этой задачи.

 

/* Файл max.c */
#include<stdio.h>
int main(void)
{
double a, b;
printf(“a=”);
scanf(“%lf”, &a);
printf(“b=”);
scanf(“%lf”, &b);
printf(“max=%8.3f\n”, (a > b? a: b));
return 0;
}

Здесь использовалось то обстоятельство, что условное выражение действительно является выражением, и оно может быть использовано в качестве аргумента в вызове функции printf().

<== предыдущая лекция | следующая лекция ==>
Принятие решений и логические величины. Операторы отношения и сравнения на равенство | Составная инструкция
Поделиться с друзьями:


Дата добавления: 2014-01-06; Просмотров: 334; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.