float
a=1;
float b;
b=a+(int)2.1;
В Си используется автоматическое приведение типа при вычислениях (при вычислениях с различными типами данных):
int a=1;
float b;
b=a+2.1; //В результате: 3.1
Правила:
1)тип char приводится к short;
2)short - к int;
3)signed - к unsigned;
4)все целые типы преобразуются к long, а long - к unsigned long;
double f;
unsigned
char ch;
unsigned
long m;
int I;
f*(I+ch/m)
Результат операции в скобках приводится к double перед умножением.
Явное приведение типа.
Правила:
1. Целое со знаком преобразуется к более короткому целому со знаком путем усечения старших бит.
Unsigned char ch;
ch=()65535
↓
255
Целое со знаком преобразуется к более длинному целому со знаком путем размножения знаков.
2. При преобразовании целого со знаком к целому без знака целое со знаком преобразуется к размеру целого без знака и результат интерпретируется как целое без знака.
Unsigned char ch1; //Пример описания. В других языках такого нет.
char ch2=-1;
ch1=ch2
↓
255
3. Преобразование целого со знаком к плавающему типу происходит без потери информации, за исключением случая преобразования типа long к float, тогда точность может быть частично потеряна.
4. Целое без знака преобразуется к более длинному целому со знаком путем расширения нулем.
5. Когда целое без знака преобразуется к целому со знаком того же размера, битовый шаблон не изменяется, однако значение, которое оно представляет, изменяется, если знаковый бит установлен.
Unsigned
short A1=65535;
short
A2=;
A2=A1;
A2
↓
.1
6. Величина типа float преобразуется к double без изменения значений. Величины double, преобразованные к float, представляются точно, если это возможно.
7. При преобразовании величины с плавающей точкой к целым типам они сначала преобразуются к типу long, при этом дробная часть отбрасывается, а затем величины типа long преобразуются к требуемому типу. Если значение слишком велико для long, то результат будет не определён (отбрасывается младшая часть мантиссы).