Язык программирования C++. Вводный курс


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


Таблица 4.1. Арифметические операции

Символ операции

Значение

Использование

*

Умножение

expr * expr

/

Деление

expr / expr

%

Остаток от деления

expr % expr

+

Сложение

expr + expr

-

Вычитание

expr – expr

Деление целых чисел дает в результате целое число. Дробная часть результата, если она есть, отбрасывается:

int ivall = 21 / 6;

int iva12 = 21 / 7;

И ival1, и ival2 в итоге получат значение 3.

Операция остаток (%), называемая также делением по модулю, возвращает остаток от деления первого операнда на второй, но применяется только к операндам целого типа (char, short, int, long). Результат положителен, если оба операнда положительны. Если же один или оба операнда отрицательны, результат зависит от реализации, то есть машинно-зависим. Вот примеры правильного и неправильного использования деления по модулю:

3.14 % 3; // ошибка: операнд типа double

21 % 6;   // правильно:  3

21 % 7;   // правильно:  0

21 % -5;  // машинно-зависимо: -1 или 1

 

int iva1 = 1024;

double dval = 3.14159;

 

iva1 % 12;   // правильно:

iva1 % dval; // ошибка: операнд типа double

Иногда результат вычисления арифметического выражения может быть неправильным либо не определенным. В этих случаях говорят об арифметических исключениях (хотя они не вызывают возбуждения исключения в программе). Арифметические исключения могут иметь чисто математическую природу (скажем, деление на 0) или происходить от представления чисел в компьютере – как переполнение

(когда значение превышает величину, которая может быть выражена объектом данного типа). Например, тип char

содержит 8 бит и способен хранить значения от 0 до 255

либо от -128 до 127 в зависимости от того, знаковый он или беззнаковый. В следующем примере попытка присвоить объекту типа char значение 256

вызывает переполнение:

#include <iostream>

 

int main() {

    char byte_value = 32;

    int ival = 8;

 

    // переполнение памяти, отведенной под byte_value

    byte_value = ival * byte_value;

 

    cout << "byte_value: " <<static_cast<int>(byte_value) << endl;

<


Начало  Назад  Вперед



Книжный магазин