Арифметические операции

Унарный плюс (+) и унарный минус (-)Единственный операнд любого арифметического типа. Формат записи:

 

+ < Выражение >

- < Выражение >

 

Унарный плюс возвращает значение операнда без изменений.

Унарный минус (его иногда называют арифметическим отрицанием) меняет знак операнда на обратный.

 

Умножение - * - бинарная операция. Примеры записи:

 

a * b 2 * 3 a * 0.56

 

Операнды могут быть любого арифметического типа данных. Тип данных результата операции определяется правилами неявного преобразования типов.

При выполнении возможен выход реального значения результата за допустимый диапазон значений типа данных – при этом значение результата операции трудно предсказать. Например:

 

cout << 1000000 * 1000000; // Результат: -727379968

cout << 1е20f * 1e20f; // Результат: 1.#INF –переполнение (+ бесконечность)

cout << 1е20f * -1e20f; // Результат: -1.#INF –переполнение (- бесконечность)

Деление - / - бинарная операция. Примеры записи:

 

a / b 2 / 3 a / 0.56

 

Если оба операнда являются целыми, то результат деления будет целым. В этом случае целый результат получается отбрасыванием дробной части от полученного реального значения (не округление). Например:

 

5 / 3 - результат равен 1.

 

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

 

5.0 / 3или 5 / 3.или5.0 / 3.0или5 / 3fили 5f / 3или 5f / 3fили

float (5) / 3 или double (5) / 3

 

Результатом вычисления всех этих выражений будет значение 1.6666… одного из вещественных типов.

Однако, например, выражение double (5 / 3)хотя и будет вещественного типа, но его значение все равно будет равно 1, поскольку сначала будет вычислено выражение в скобках, результат которого будет целого типа и будет равен 1, а затем это значение будет приведено к вещественному типу.

При выполнении операции возможен выход реального значения результата за допустимый диапазон значений типа данных – при этом значение результата операции трудно предсказать. Например:

 

cout << 1е35f / 0.0001f; // Результат: 1.#INF –переполнение (+ бесконечность)

cout << 1е20f / -0.0001f; // Результат: -1.#INF –переполнение (- бесконечность)

cout << 1е200 / 1e-200; // Результат: 1.#INF –переполнение (бесконечность)

 

Если первый операнд вещественного типа, то деление на 0 дает значение 1.#INF или -1.#INF. Если же он целого типа, возникает ошибка режима исполнения (деление на 0).

 

Остаток от деления - % - бинарная операция. Операнды только целого типа. Результат операции целого типа. Например:

 

5 % 1 - результат 0

5 % 2 - результат 1

5 % 3 - результат 2

5 % 4 - результат 1

5 % 5 - результат 0

5 % 6 - результат 5

…..

 

Если второй операнд равен 0, возникает ошибка режима исполнения (деление на 0).

 

Сложение (+) и вычитание (-) – бинарные операции. Операнды могут быть любых арифметических типов данных. Примеры записи:

a + b

a – b

 

Тип результата операций определяется правилами неявного преобразования типов.

При выполнении операций возможны ошибки переполнения и некорректного преобразования типов данных операндов. Например:

 

unsigned short n = 0, m;

m = n - 1;

cout << m << endl; //На экран будет выведено65535

n = m + 1;

cout << n << endl; //На экран будет выведено0

 

Инкремент (++) и декремент (--) – унарные операции увеличения и уменьшения операнда на 1 соответственно. Операнд может быть любого арифметического типа данных.

Операции имеют две формы – префиксную (++a, --a) и постфиксную (a++, a--).

Независимо от формы операция инкремента эквивалентна следующему оператору:

a = a + 1;

 

а операция декремента следующему:

 

a = a - 1;

Например:

 

#include <iostream>

using namespace std;

Int main()

{

int i = 7, j = 10;

++ i;

j ++;

cout << i << "\t" << j << endl; // На экран выведено 8 11

-- i;

J --;

cout << i << "\t" << j << endl; // На экран выведено 7 10

 

system("Pause");

Return 0;

}

 

Из примера видно, что разница между префиксной и постфиксной формами этих операций не чувствуется. Действительно в этом примере эти две формы работают одинаково.

Немного изменим текст программы:

 

#include <iostream>

using namespace std;

Int main()

{

int i = 7, j = 10;

cout << ++ i << "\t " << j ++ << endl; // На экран выведено 8 10

cout << i << "\t " << j << endl; // На экран выведено 8 11

cout << -- i << "\t " << j -- << endl; // На экран выведено 7 11

cout << i << "\t " << j << endl; // На экран выведено 7 10

 

system("Pause");

Return 0;

}

 

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

В первом примере операторы ++ i; j ++; просто изменяют значения переменных i и j без какой-либо другой обработки и только после окончания работы этих операторов на экран выводятся эти измененные значения. Поэтому различие между префиксной и постфиксной формами не чувствуется. То же самое происходит и при выполнении операторов -- i; j--;.

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

Еще пример:

#include <iostream>

using namespace std;

Int main()

{

int i = 7, j = 10, k;

k = (++ i) + (j --); // Или k = ++ i + j --;

cout << "k = " << k << endl; // k = 18

cout << "i = " << i << endl; // i = 8

cout << "j = " << j << endl; // j = 9

 

system("Pause");

Return 0;

}

 

А чему будет равно значение переменной k в этих случаях:

 

int i = 7, k;

k = (i ++) + i;

 

Здесь k = 14.

int i = 7, k;

k = (++ i) + i;

 

Здесь k = 16.

 

int i = 7, k;

k = i + (++ i);

 

Здесь k = 16.

int i = 7, k;

k = (++ i) + (++ i);

 

Здесь k = 18.

 

То есть сначала просматривается все выражение, при каждой встрече операции инкремента (декремента) в префиксной форме выполняется изменение на единицу переменной, а затем вычисляется выражение.

А как интерпретировать такие выражения:

 

a+++b

A---b

 

Эти выражения следует интерпретировать так:

 

(a++) + b

(a--) - b

 

Но не так:

 

a + (++b)

A - (--b)

 

Для более понятной записи текста программы в подобных случаях лучше использовать скобки.

Операции отношения

Операции этой группы служат для сравнения значений. Сюда входят следующие операции:

· == - равно;

· != - не равно;

· > - больше;

· >= - больше или равно;

· < - меньше;

· <= - меньше или равно.

 

Все эти операции бинарные. В качестве операндов могут быть использованы выражения любых арифметических типов данных. Результат этих операций всегда логического типа (bool).

Примеры:

 

a == b,a != b,a > 10,(a - 3) >= (b + 10).








Дата добавления: 2019-02-07; просмотров: 344;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.026 сек.