Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
мини конспект по С++.doc
Скачиваний:
28
Добавлен:
25.03.2015
Размер:
782.85 Кб
Скачать

X##; - постфиксную.

Если эти операции используются в чистом виде, то различий между постфиксной и префиксной формами нет. Если же они используются в выражении, то в префиксной форме (##x) сначала значение x изменится на 1, а затем будет использовано в выражении; в постфиксной форме (x##) сначала значение используется в выражении, а затем изменяется на 1. Операции над указателями рассмотрим позже.

Пример 1: Пример 2:

int i,j,k; Смысл записи int n,a,b,c,d; Значения

float x,y; n = 2; a = b = c = 0;

... a = ++n; n=3, a=3

x* = y; x = x*y; a+ = 2; a=5

i+ = 2; i = i+2; b = n++; b=3, n=4

x/ = y+15; x = x/(y+15); b- = 2; b=1

--k k = k-1; c = --n; n=3, c=3

--k k = k-1; c* = 2; c=6

j = i++; j = i; i = i+1; d = n--; d=3, n=2

j= ++i;i=i+1;j=i;d% = 2;d=1

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

В операциях могут участвовать операнды различных типов, в этом случае они преобразуются к общему типу в порядке увеличения их "размера памяти", т.е. объема памяти, необходимого для хранения их значений. Поэтому неявные преобразования всегда идут от "меньших" объектов к "большим". Схема выполнения преобразований операндов арифметических операций:

short, char int unsigned long double

float double

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

- значения типов char иshort всегда преобразуются вint;

- если любой из операндов (a илиb) имеет типdouble, то второй преобразуется вdouble;

- если один из операндов long, то другой преобразуется вlong.

Результатом 1/3 будет «0», чтобы избежать такого рода ошибок необходимо явно изменять тип хотя бы одного операнда, т.е. записывать, например: 1. / 3.

Типы char иint могут свободно смешиваться в арифметических выражениях. Каждая переменная типаchar автоматически преобразуется вint, что обеспечивает значительную гибкость при проведении определенных преобразований символов.

При присваивании значение правой части преобразуется к типу левой, который и является типом результата. И здесь необходимо быть внимательным, т.к. при некорректном использовании операций присваивания могут возникнуть неконтролируемые ошибки. Так, при преобразовании int вchar старший байт просто отбрасывается.

Пусть имеются значения:

float x;int i;

тогда

x=i; иi=x;

приводят к преобразованиям, причем float преобразуется вintс отбрасыванием дробной части. Типdouble преобразуется воfloat округлением. Длинное целое преобразуется в более короткое целое иchar посредством отбрасывания лишних бит более высокого порядка.

При передаче данных функциям также происходит преобразование типов: в частности, char становитсяint, аfloat -double.

Операция приведения типа

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

Вид записи операции:

(тип) выражение;

ее результат - значение выражения, преобразованное к заданному типу.

Операция приведения типа вынуждает компилятор выполнить указанное преобразование, но ответственность за последствия возлагается на программиста. Рекомендуется использовать эту операцию в исключительных случаях, например:

float x;

int n=6,k=4;

x=(n+k)/3; →x=3, т.к. дробная часть будет отброшена;

x=(float)(n+k)/3; → x=3.333333 - использование операции приведения типа позволяет избежать округления результата деления целочисленных операндов.