Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЗФ_ОАиП / Лекции ГГУ Скорины - Программирование.doc
Скачиваний:
204
Добавлен:
21.03.2016
Размер:
2.27 Mб
Скачать

9.8. Логические операции и операции отношения

Данные операции используются при формировании логических выражений. Логическое значение в языке С может иметь только два значения: 1, если оно ИСТИННО; и 0, если оно ЛОЖНО (т.е. тип результата логической операции – int).

Строго говоря, в языке С значению ИСТИНА соответствует не только значение 1, но и любое другое ненулевое значение: 0 – ЛОЖЬ, все что <> 0 – ИСТИНА.

Операции отношения

>

больше

1, если операнд слева больше, чем справа, иначе 0

<

меньше

1, если операнд слева меньше, чем справа, иначе 0

==

равно

1, если операнд слева равен операнду справа, иначе 0

>=

больше или равно

1, если операнд слева больше или равен, чем справа, иначе 0

<=

меньше или равно

1, если операнд слева меньше или равен, чем справа, иначе 0

!=

не равно

1, если операнд слева не равен операнду справа, иначе 0

Логические операции

&&

логическое И

1, если оба операнда равны 1, иначе 0

||

логическое ИЛИ

1, если один из операндов равен 1, иначе 0

!

логическое НЕ

унарная: 1, если операнд равен 0, иначе 0

Приоритет операций по убыванию: !, (>, <, >=, <=), (==, !=), &&, ||.

if (x!=y && x==z) {

// выполняется, если x не равно y и x равно z

}

if (!x || y<z) { // if (x==0 || y<z) {

// выполняется, если не x или y меньше z

}

if (x && y) { // if (x!=0 && y!=0) {

// выполняется, если x и y

}

Обратить внимание! Сравнение на равно это ‘= =’, а не ‘=’. Если напишите ‘=’ при сравнении, ошибки не будет, а будет простое присваивание.

if (x = 10) { // x = 10 и войдем в if, т.к. результат условия 10 (ИСТИНА)

операторы

}

if (x = 0) { // x = 0 и не войдем в if, т.к. результат условия 0 (ЛОЖЬ)

операторы

}

9.9. Условная операция «? :»

Условная операция ? : – единственная тернарная (то есть принимающая три операнда) операция в языке C. Это специфичная операция для языка С. Формат операции:

операнд1 ? операнд2 : операнд3;

В первом операнде записывается логическое выражение. Оно вычисляется. Если получается ИСТИНА, результатом всей операции условия является второй операнд, если ЛОЖЬ – результат операции есть третий операнд. Использовать эту операцию можно вместо простого ветвления if else.

flag = x > y ? 1 : 0;

Приведённый код эквивалентен следующему:

if (x>y)

flag = 1;

else

flag = 0;

или можно и так записать:

x > y ? (flag = 1) : (flag = 0);

Можно и так писать:

d = x > y ? (flag = 1) : (flag = 0); // d будет таким же как flag

9.10. Операция последовательного вычисления

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

x=0, a=b;

Операнды могут быть любых типов. Результат операции имеет значения и тип второго операнда.

9.11. Операция определения требуемой памяти в байтах sizeof

Результатом операции sizeof является размер в байтах типа или переменной. Тип операнда – значение любого типа или имени типа. Тип результата – unsigned int. Используется как sizeof (выражение) или sizeof (имя типа).

int a, b, c, d;

char z;

a = sizeof(int); // получим 2

b = sizeof(unsigned long); // получим 4

c = sizeof(short); // получим 2

С помощью этой операции можно определить размер не только типа, но и любой переменной (в том числе и массива).

d = sizeof(a); // получим 2

d = sizeof(z); // получим 1

Число элементов в массиве целых чисел, определяемое как число байт в массиве, поделенное на число байт, занимаемых одним элементом массива.

Для целого одномерного массива число элементов определяется так:

n = sizeof(mas_name) / sizeof(int);