Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
61.doc
Скачиваний:
131
Добавлен:
11.05.2015
Размер:
451.58 Кб
Скачать

17. Выражения: математические, логические, текстовые.

Выражения состоят из операторов, констант, функций и переменных. В языке С выражением является любая правильная последовательность этих элементов.

Порядок вычисления подвыражений в выражениях языка С не определен. Компилятор может самостоятельно перестроить выражение с целью создания оптимального объектного кода. Это значит, что программист не может полагаться на определенную последовательность вычисления подвыражений. Например, при вычислении выражения

x=f1() +f2();

нет никаких гарантий того, что функция f() будет вызвана перед вызовом f2().

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

Арифметические операции.

- вычитание

+ сложение

* умножение

/ деление

% остаток от деления

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

&& И

|| ИЛИ

! НЕ, отрицание

Логические операции реализуют средствами языка С операции формальной логики. В логических операциях в качестве операндов и результатов операций используются значения истина (true) и ложь (false). В языке С значение истина представляется любым числом, отличным от нуля. Значение ложь представляется нулем. Результатом операции является истина или ложь.

Строка– это нуль или более символов, заключенных в двойные кавычки. Кавычки не входят в строку. Фактически строковая константа – это массив символов. Во внутреннем представлении строки в конце автоматически помещается нуль-символ ('\0'), поэтому для строки требуется память на один байт больше, чем количество символов между двойными кавычками.

Символьная константа и строка, содержащая один байт не одно и то же, т.е. ‘x’!=”x”. Здесь ”x” – это массив символов, содержащий один символ (х) и '\0', 'x' –это целое значение равное коду буквы х из ASCII.

При инициализации массива символов можно использовать строковую константу:

chars[10]=”Privet”: - инициализирует переменную s как массив символов из семи элементов. Если задается размер массива, а строка длиннее, то выдается сообщение об ошибке. Если строка короче, чем размер массива, то лишние элементы массива содержат «мусор».

18. Унарные операции.

- арифметическое отрицание;

~ побитовое логическое отрицание:

! логическое отрицание;

* разадресация (косвенная адресация);

& взятие адреса;

+унарный плюс;

++ увеличение (инкремент)

-- уменьшение (декремент)

sizeofразмер

Унарные операции выполняются справа налево.

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

K=3;

L=K++; //L=3, K=4

L=++K; //L=5, K=5

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

Оператор & - унарный оператор, возвращающий адрес операнда в памяти. Например, оператор m=&count; записывает в переменную m адрес переменной count. Этот адрес представляет собой адрес ячейки памяти компьютера, в которой размещена переменная.

Оператор * возвращает значение объекта, расположенного по указанному адресу. Операндом для * служит адрес объекта (переменной). Например, если переменная m содержит адрес переменной count, то оператор q=*m; записывает значение переменной count в переменную q.

Операция определения размера sizeof позволяет определить длину операнда в байтах. Например, если компилятор для числе типа int отводит 4 байта, а для чисел типа double – 8, то следующая программа напечатает 8 4.

double f;

printf (“%d”, sizeof f);

printf(“%d”, sizeof(int));

Для вычисления размера типа переменной имя типа д.б. заключено в круглые скобки.

Унарный минус умножает операнд на -1, то есть меняет его знак на противоположный.

Операция побитового отрицания ~ инвертирует биты слова:

x: 0101110110...101101

~x: 1010001001...010010