- •1.Скалярные типы данных
- •Unsigned int 2/4 байта
- •2.Векторные типы данных
- •3. Неявное и явное преобразование типов.
- •Преобразования при вычислении выражений
- •4. Понятие истины и логические операции. Сравните с Паскалем, приведите примеры.
- •5. Типы циклов Оператор for
- •7. Указатели и операции над указателями
- •Оператор do while
- •6. Операторы ветвления
- •8. Массивы и указатели
- •9. Классы памяти
- •10. Структура и объединение. Доступ к полям. Сходства и отличия. Приведите примеры.
- •Объединения (смеси)
- •11. Объявление, прототип и определение функций. Приведите примеры.
- •12. Список формальных и фактических параметров.
- •13. Механизмы передачи формальных параметров в функцию. Приведите примеры.
- •14. Возвращаемое значение функции
- •15 Препроцессор языка с. Как и когда происходит макроподстановка.
- •16 Статистические и динамические объекты. Динамический захват памяти. Локальный и глобальный heap.
- •17. Потоковый и префиксный доступ к файлам.
- •18 Основные понятия текстового и графического режимов.
- •19. Использоване модификаторов near, far, huge. Приведите примеры.(аЯиП)
3. Неявное и явное преобразование типов.
При выполнении операций происходят неявные преобразования типов в следующих случаях:
- при выполнении операций осуществляются обычные арифметические преобразования
- при выполнении операций присваивания, если значение одного типа присваивается переменной другого типа;
- при передаче аргументов функции.
Кроме того, в Си есть возможность явного приведения значения одного типа к другому.
В операциях присваивания тип значения, которое присваивается, преобразуется к типу переменной, получающей это значение. Допускается преобразования целых и плавающих типов, даже если такое преобразование ведет к потере информации.
Преобразование целых типов со знаком. Целое со знаком преобразуется к более короткому целому со знаком, посредством усечения старших битов. Целое со знаком преобразуется к более длинному целому со знаком, путем размножения знака. Когда целое со знаком преобразуется к размеру целого без знака, то результат рассматривается как значение без знака. Преобразование целого со знаком к плавающему типу происходит без потери информации, за исключением случая преобразования значения типа long int или unsigned long int к типу float, когда точность часто может быть потеряна.
Преобразование целых типов без знака. Целое без знака преобразуется к более короткому целому без знака или со знаком путем усечения старших битов. Целое без знака преобразуется к более длинному целому без знака или со знаком путем дополнения нулей слева.
Когда целое без знака преобразуется к целому со знаком того же размера, битовое представление не изменяется. Целые значения без знака преобразуются к плавающему типу, путем преобразования целого без знака к значению типа signed long, а затем значение signed long преобразуется в плавающий тип. Преобразования из unsigned long к типу float, double или long double производятся с потерей информации, если преобразуемое значение больше, чем максимальное положительное значение, которое может быть представлено для типа long.
Преобразования плавающих типов. Величины типа float преобразуются к типу double без изменения значения. Величины double и long double преобразуются к float c некоторой потерей точности. Если значение слишком велико для float, то происходит потеря значимости, о чем сообщается во время выполнения.
При преобразовании величины с плавающей точкой к целым типам она сначала преобразуется к типу long (дробная часть плавающей величины при этом отбрасывается), а затем величина типа long преобразуется к требуемому целому типу. Если значение слишком велико для long, то результат преобразования не определен.
Указатель на тип void может быть преобразован к указателю на любой тип, и указатель на любой тип может быть преобразован к указателю на тип void без ограничений. Значение указателя может быть преобразовано к целой величине. Метод преобразования зависит от размера указателя и размера целого типа следующим образом:
- если размер указателя меньше размера целого типа или равен ему, то указатель преобразуется точно так же, как целое без знака;
- если указатель больше, чем размер целого типа, то указатель сначала преобразуется к указателю с тем же размером, что и целый тип, и затем преобразуется к целому типу.
Целый тип может быть преобразован к адресному типу по следующим правилам:
- если целый тип того же размера, что и указатель, то целая величина просто рассматривается как указатель (целое без знака);
- если размер целого типа отличен от размера указателя, то целый тип сначала преобразуется к размеру указателя (используются способы преобразования, описанные выше), а затем полученное значение трактуется как указатель.
Преобразования, выполняемые над аргументами при вызове функции, зависят от того, был ли задан прототип функции (объявление "вперед") со списком объявлений типов аргументов.
Если задан прототип функции и он включает объявление типов аргументов, то над аргументами в вызове функции выполняются только обычные арифметические преобразования.
Преобразования при приведении типов. Явное преобразование типов может быть осуществлено посредством операции приведения типов, которая имеет формат:
( имя-типа ) операнд .В приведенной записи имя-типа задает тип, к которому должен быть преобразован операнд.
