Аддитивные операции
К аддитивным операциям относятся сложение (+) и вычитание (-). Операнды могут быть
целого или плавающего типов. В некоторых случаях над операндами аддитивных операций
выполняются общие арифметические преобразования. Однако преобразования, выполняемые при
аддитивных операциях, не обеспечивают обработку ситуаций переполнения и потери значимости.
Информация теряется, если результат аддитивной операции не может быть представлен типом
операндов после преобразования. При этом сообщение об ошибке не выдается.
Пример:
int i=30000, j=30000, k;
k=i+j;
В результате сложения k получит значение равное -5536.
Результатом выполнения операции сложения является сумма двух операндов. Операнды могут
быть целого или плавающего типа или один операнд может быть указателем, а второй - целой
величиной.
Когда целая величина складывается с указателем, то целая величина преобразуется путем
умножения ее на размер памяти, занимаемой величиной, адресуемой указателем.
Когда преобразованная целая величина складывается с величиной указателя, то результатом
является указатель, адресующий ячейку памяти, расположенную на целую величину дальше от
исходного адреса. Новое значение указателя адресует тот же самый тип данных, что и
исходный указатель.
Операция вычитания (-) вычитает второй операнд из первого. Возможна следующая комбинация
операндов:
1. Оба операнда целого или плавающего типа.
2. Оба операнда являются указателями на один и тот же тип.
3. Первый операнд является указателем, а второй - целым.
Отметим, что операции сложения и вычитания над адресами в единицах, отличных от длины
типа, могут привести к непредсказуемым результатам.
Пример:
double d[10],* u;
int i;
u = d+2; /* u указывает на третий элемент массива */
i = u-d; /* i принимает значение равное 2 */