C. Бочков - Язык программирования Си для персонального компьютера
- Название:Язык программирования Си для персонального компьютера
- Автор:
- Жанр:
- Издательство:СП Диалог, Радио и связь
- Год:1990
- ISBN:5-256-00974-5
- Рейтинг:
- Избранное:Добавить в избранное
-
Отзывы:
-
Ваша оценка:
C. Бочков - Язык программирования Си для персонального компьютера краткое содержание
Книга содержит полное описание наиболее распространенных реализаций языка программирования Си на 16-разрядных микроЭВМ, совместимых с IBM PC. Приведено описание стандартных библиотек языка.
Для слушателей учебных курсов в области программирования, разработчиков программного обеспечения, а также студентов соответствующих специальностей вузов. Может быть использовано как техническая документация и справочное пособие для широкого круга программистов, как профессионалов, имеющих большой опыт работы на языке Си, так и начинающих программировать на Си.
Язык программирования Си для персонального компьютера - читать онлайн бесплатно полную версию (весь текст целиком)
Интервал:
Закладка:
Беззнаковое целое значение преобразуется к короткому беззнаковому целому значению или короткому знаковому целому значению путем усечения старших битов. Беззнаковое целое значение преобразуется к длинному беззнаковому целому значению или длинному знаковому целому значению путем дополнения нулями слева. Беззнаковое целое значение преобразуется к значению с плавающей точкой путем преобразования к типу long, а затем преобразования значения типа longк значению с плавающей точкой.
Если беззнаковое целое значение преобразуется к знаковому целому значению того же размера, то битовое представление не меняется. Однако, если старший (знаковый) бит был установлен в единицу, представляемое значение изменится.
Правила преобразования беззнаковых целых типов приведены в таблице 4.3.
Таблица 4.3.
От типа | К типу | Метод |
unsigned char | char | сохранение битового представления; старший бит становится знаковым |
unsigned char | short | дополнение нулевыми битами |
unsigned char | long | дополнение нулевыми битами |
unsigned char | unsigned short | дополнение нулевыми битами |
unsigned char | unsigned long | дополнение нулевыми битами |
unsigned char | float | дополнение нулевыми битами до long; преобразование long к float |
unsigned char | double | дополнение нулевыми битами до long; преобразование long к double |
unsigned short | char | сохранение младшего байта |
unsigned short | short | сохранение битового представления; старший бит становится знаковым |
unsigned short | long | дополнение нулевыми битами |
unsigned short | unsigned char | сохранение младшего байта |
unsigned short | unsigned long | дополнение нулевыми битами |
unsigned short | float | дополнение нулевыми битами до long; преобразование long к float |
unsigned short | double | дополнение нулевыми битами до long; преобразование long к double |
unsigned long | char | сохранение младшего байта |
unsigned long | short | сохранение младшего слова |
unsigned long | long | сохранение битового представления; старший бит становится знаковым |
unsigned long | unsigned char | сохранение младшего байта |
unsigned long | unsigned short | сохранение младшего слова |
unsigned long | float | преобразование к long; преобразование long к float |
unsigned long | double | преобразование к long; преобразование long к double (в версии 5 СП MSC это преобразование производится напрямую, без промежуточного типа long) |
Примечание . В СП MSC и СП ТС тип unsigned intэквивалентен типу unsigned shortи преобразование для типа unsigned intпроизводится как для типа unsigned short. В некоторых реализациях языка Си тип unsigned intэквивалентен типу unsigned longи преобразование для типа intпроизводится как для типа unsigned long.
Преобразование плавающих типов Значения типа floatпреобразуются к типу doubleбез потери точности. Значения типа doubleпри преобразовании к типу floatпредставляются с некоторой потерей точности. Однако если порядок значения типа doubleслишком велик для представления экспонентой значения типа float, то происходит потеря значимости, о чем сообщается во время выполнения.
Значения с плавающей точкой преобразуются к целым типам в два приема: сначала производится преобразование к типу long, а затем преобразование этого значения типа longк требуемому типу. Дробная часть плавающего значения отбрасывается при преобразовании к long; если полученное значение слишком велико для типа long, то результат преобразования не определен. Правила преобразования плавающих типов приведены в таблице 4.4.
Таблица 4.4.
От типа | К типу | Метод |
float | char | преобразование к long; преобразование long к char |
float | short | преобразование к long; преобразование long к short |
float | long | усечение дробной части; результат не определен, если он слишком велик для представления типом long |
float | unsigned short | преобразование к long; преобразование long к unsigned short |
float | unsigned long | преобразование к long; преобразование long к unsigned long |
float | double | дополнение мантиссы нулевыми битами справа |
double | char | преобразование к float; преобразование float к char |
double | short | преобразование к float; преобразование float к short |
double | long | усечение дробной части; результат не определен, если он слишком велик для представления типом long |
double | unsigned short | преобразование к long; преобразование long к unsigned short |
double | unsigned long | преобразование к long; преобразование long к unsigned long |
double | float | усечение младших битов мантиссы; возможна потеря точности; если значение слишком велико для представления типом float, то результат преобразования не определен |
Указатель на значение одного типа может быть преобразован к указателю на значение другого типа. Результат может, однако, оказаться неопределенным из-за отличий в требованиях к выравниванию объектов разных типов и в размере памяти, занимаемом различными типами.
Указатель при объявлении всегда ассоциируется с некоторым типом. В частности, это может быть тип void. Указатель на voidможно преобразовывать к указателю на любой тип, и обратно. Указателям на некоторый тип можно присваивать адреса объектов другого типа, однако компилятор выдаст предупреждающее сообщение, если только это не указатель на тип void.
Указатели на любые типы данных могут быть преобразованы к указателям на функции, и обратно. Однако в СП MSC для того, чтобы присвоить указатель на данные указателю на функцию (или наоборот), необходимо выполнить явное приведение его типа.
Специальные ключевые слова near, far, hugeпозволяют модифицировать формат и размер указателей в программе. Компилятор учитывает принятый в выбранной модели памяти размер указателей и может в некоторых случаях неявно производить соответствующие преобразования адресных значений. Так, передача указателя в качестве аргумента функции может вызвать неявное преобразование его размера к большему из следующих двух значений:
—принятому по умолчанию размеру указателя для действующей модели памяти (например, в средней модели указатель на данные имеет тип near);
—размеру типа аргумента.
Если задано предварительное объявление функции, в котором указан явно тип аргумента-указателя, в т.ч. с модификаторами near, far, huge, то будет преобразование именно к этому типу.
Читать дальшеИнтервал:
Закладка: