Справочник языка Cи



         

Преобразования типов при присваивании


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

Тип long double ведет себя в преобразованиях аналогично типу double.

Преобразования знаковых целых типов Знаковое целое значение преобразуется к короткому знаковому целому значению (short

signed int) посредством усечения старших битов. Знаковое целое значение преобразуется к длинному знаковому целому значению (long signed int) путем расширения знака влево. Преобразование знаковых целых значений к плавающим значениям происходит путем преобразования к типу long, а затем преобразования к плавающему типу. При этом возможна некоторая потеря точности. При преобразовании знакового целого значения к беззнаковому

целому значению (unsigned int) производится лишь преобразование к размеру беззнакового целого типа, и результат интерпретируется как беззнаковое целое значение.

Правила преобразования знаковых целых типов приведены в таблице 4.2. Предполагается, что тип char по умолчанию является знаковым. Если во время компиляции используется опция, которая изменяет умолчание для типа char со знакового на беззнаковый, то для него выполняется преобразование как для типа unsigned

char (см. таблицу 4.3).

Таблица 4.2.

Преобразование знаковых целых типов

От типа

К типу

Метод

char

short

дополнение знаком

char

long

дополнение знаком

char

unsigned char

сохранение битового представления;

char

unsigned short

старший бит теряет функцию знакового бита дополнение знаком до short; преобразование short в unsigned short

char

unsigned long

дополнение знаком до long; преобразование long в unsigned long

char

float

дополнение знаком до long; преобразование long к float

char

double

дополнение знаком до long; преобразование long к double

short

char

сохранение младшего байта

short

long

дополнение знаком

short

unsigned char

сохранение младшего байта

short

unsigned short

сохранение битового представления; старший бит теряет функцию знакового бита

short

unsigned long

дополнение знаком до long; преобразование long в unsigned long

short

float

дополнение знаком до long; преобразование long к float

short

double

дополнение знаком до long; преобразование long к double

long

char

сохранение младшего байта

long

short

сохранение младшего слова

long

unsigned char

сохранение младшего байта

long

unsigned short

сохранение младшего слова

long

unsigned long

сохранение битового представления; старший бит теряет функцию знакового бита

long

float

представляется как float; возможна некоторая потеря точности

long

double

представляется как double; возможна некоторая потеря точности

<


Содержание  Назад  Вперед