Лабораторная работа: Операции языка Cи
- enum --> int порядковый номер в перечислимом типе
- float --> double дробная часть дополняется нулями
Если какой-нибудь операнд имеет тип double, unsigned long, long или unsigned int то и другой операнд приводится к тому же типу. Результат: того же типа.
Если оба операнда имеют тип int, то результат тоже типа int.
При вызове функций их аргументы – тоже выражения, поэтому в них приводятся char,short к int и float к double. Это говорит о том, что аргументы (формальные параметры) функций можно всегда объявлять как int и double вместо char,short и float соответственно.
Зато спецификатор unsigned является существенным.
В присваиваниях
op = expr;
Тип выражения expr приводится к типу левой части – op. При этом возможны приведения более "длинного" типа к более "короткому" при помощи усечения, вроде:
- int --> char обрубается старший байт.
- long --> int обрубается старшее слово.
- float --> int отброс дробной части
- double --> int и обрубание мантиссы, если не лезет.
- double --> float округление дробной части.
Вот еще некоторые приведения типов:
- signed --> unsigned виртуально (просто знаковый бит
- unsigned --> signed считается значащим или наоборот).
- unsigned int --> long добавление нулей слева.
- int --> long расширение знакового бита.
- float --> int преобразование внутреннего.
- int --> float представления: машинно зависимо.
Некоторые преобразования могут идти в несколько стадий, например:
- char --> long это
- char --> int --> long
char --> unsigned long это
- char --> int --> unsigned long
Лабораторные задания
Основные арифметические операции
Что напечатает следующая программа?
#include <stdio.h>
main()
{