- •Укороченный язык си
- •Порядок обработки информации машиной с целью получения программы
- •Элементы языка си
- •История языка
- •Понятие языка программирования
- •Основные понятия языка программирования
- •Основные символы языка
- •Ключевые слова
- •Использование комментариев в тексте программы
- •Описательные и выполняемые операторы языка
- •Понятие идентификатора
- •Переменные и базовые типы данных
- •Константы
- •Указатели
- •Типы структурированных переменных
- •Массивы
- •Структуры
- •Структура программ
- •Составные части программы
- •Функции в языке си
- •Понятие модуля
- •Арифметические выражения и присваивания
- •Арифметические выражения
- •Приоритет арифметических операций
- •Преобразования типов при вычислении выражений
- •Странные операторы присваивания
- •Сокращенная запись арифметических выражений
- •Логические выражения
- •Операция sizeof
- •Программирование вычислительных структур
- •Исполняемые операторы
- •Структура альтернатива
- •Структура повторение
-
Приоритет арифметических операций
Для правильной записи выражений необходимо знать приоритет (старшинство) операций, то есть последовательность их выполнения. Сначала выполняются
• операции в скобках, затем…
• вызовы функций, затем…
• умножение, деление и остаток от деления, слева направо, затем…
• сложение и вычитание, слева направо.
Например:
2 1 5 4 3 8 6 7
x = ( a + 5 * b ) * fabs ( c + d ) — ( 3 * b — c );
Для изменения порядка выполнения операций используются круглые скобки. Выражение

в компьютерном виде запишется в виде
y = (4*x + 5) / ((2*x — 15*z)*(3*z — 3)) — 5 * x /
(x + z + 3);
Рекомендуется при записи выражений не экономить скобки!
-
Преобразования типов при вычислении выражений
При выполнении операций производится автоматическое преобразование типов, чтобы привести операнды выражений к общему типу или чтобы расширить короткие величины до размера целых величин, используемых в машинных командах. Выполнение преобразования зависит от специфики операций и от типа операнда или операндов.
Рассмотрим общие арифметические преобразования.
1. Операнды типа float преобразуются к типу double.
2. Если один операнд long double, то второй преобразуется к этому же типу.
3. Если один операнд double, то второй также преобразуется к типу double.
4. Любые операнды типа char и short преобразуются к типу int.
5. Любые операнды unsigned char или unsigned short преобразуются к типу unsigned int.
6. Если один операнд типа unsigned long, то второй преобразуется к типу unsigned long.
7. Если один операнд типа long, то второй преобразуется к типу long.
8. Если один операнд типа unsigned int, то второй операнд преобразуется к этому же типу.
Таким образом, можно отметить, что при вычислении выражений операнды преобразуются к типу того операнда, который имеет наибольший размер.
Пример:
double ft,sd;
unsigned char ch;
unsigned long in;
int i;
....
sd=ft*(i+ch/in);
При выполнении оператора присваивания правила преобразования будут использоваться следующим образом. Операнд ch преобразуется к unsigned int (правило 5). Затем он преобразуется к типу unsigned long (правило 6). По этому же правилу i преобразуется к unsigned long и результат операции, заключенной в круглые скобки будет иметь тип unsigned long. Затем он преобразуется к типу double (правило 3) и результат всего выражения будет иметь тип double.
Приведение типов это изменение (преобразование) типа объекта. Для выполнения преобразования необходимо перед объектом записать в скобках нужный тип:
( имя-типа ) операнд
Приведение типов используются для преобразования объектов одного скалярного типа в другой скалярный тип.
Пример:
int i;
bouble x;
b = (double)i+2.0;
В этом примере целая переменная i с помощью операции приведения типов приводится к плавающему типу, а затем уже участвует в вычислении выражения.
Рекомендуется все приведения типов в выражениях делать явно!
