logo
Подбельский Фомин_Программирование на языке СИ_

Правила стандартных арифметических преобразований

Исходный тип

Преобразованный тип

Правила преобразований

char

int

Расширение нулем или знаком в зависимости от умолчания для char

unsigned char

int

Старший байт заполняется нулем

signed char

int

Расширение знаком

short

int

Сохраняется то же значение

unsigned short

unsigned int

Сохраняется то же значение

enum

int

Сохраняется то же значение

битовое поле

int

Сохраняется то же значение

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

На рис. 1.2 стрелками отмечены "безопасные" арифметические преобразования, гарантирующие сохранение точности и неизменность численного значения.

Рис. 1.2. Арифметические преобразования типов, гарантирующие сохранение значимости

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

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