6 Явные и неявные преобразования типов в с++. Правила неявного преобразования.

Операции преобразования типа:

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, то результат будет не определён (отбрасывается младшая часть мантиссы).

 

Hosted by uCoz