§ 2. Организация вычислений
2.3. Целочисленный тип данных
Часто при решении задач нужно работать с целыми числами. Для этого в C++ используется тип данных int. С помощью переменных типа можно задавать целые числа из диапазона от –2147483648 до 2147483647. Для этого типа данных определены следующие операции:
В С++ для деления как целых, так и вещественных чисел используется один и тот же знак «/». Будет результат целым или вещественным, зависит от операндов (переменных или чисел, стоящих слева и справа от знака). Если хотя бы один операнд вещественный, то результат будет вещественным. Если оба операнда целые, то и результат будет целым. Операция «%» соответствует операции mod в языке программирования Pascal и используется только для целых чисел. Пример 2.6. Даны два целых числа a и b. Написать программу, которая находит целую часть и остаток от деления a на b. Этапы выполнения задания I. Исходные данные: переменные a и b. II. Результат: переменные c (целочисленное частное) и d (остаток). III. Алгоритм решения задачи. 1. Ввод исходных данных. IV. Описание переменных: a, b, c, d — int. Значение, которое выдает в качестве результата операция %, может отличаться от математического определения остатка (в математике под остатком понимают неотрицательное число). Если остаток не равен нулю, то знак числа, которое является результатом операции %, определяется знаками операндов (пример 2.7). Если проанализировать данные из таблицы, то можно понять, что При выполнении арифметических операций следует помнить, что сначала операция выполняется в соответствии с типами операндов, а затем происходит преобразование полученного типа к типу результата. Например, пусть в программе записана команда: double x = 16 / 7; Вначале будет выполнено деление 16 на 7 (целочисленное), в результате получим 2. После чего целое значение 2 будет преобразовано к вещественному значению 2.0. Чтобы получить вещественный результат, необходимо, чтобы хотя бы одно число было вещественным. Команду можно записать, например, так: double x = 16. / 7; Если в операторе присваивания используются не константы, а переменные, то необходимо преобразовать выражение так, чтобы действия выполнялись с нужным типом. Например, оператор присваивания double x = a / b; в котором a и b целочисленные переменные, можно записать так: double x = 1. * a / b; Тогда результат операции умножения будет вещественным и деление будет выполняться для вещественных чисел. |
Тип int является базовым целочисленным типом. Другие целочисленные типы можно получать, приписывая к int модификаторы. Различают два типа модификаторов, которые могут менять знаковость или размер. Знаковость: signed — тип будет иметь знаковое представление (используется по умолчанию, если модификатор не указан); unsigned — тип будет иметь беззнаковое представление. Размер: short — тип будет занимать в памяти не меньше 16 бит; long — тип будет иметь размер не меньше 32 бит; long long — тип будет иметь размер не меньше 64 бит. Примеры использования модификаторов:
Если при описании используют модификаторы, то слово int может быть опущено. Следующие описания эквивалентны: Пример 2.6. V. Программа:
IV. Тестирование программы: Запустите программу и введите значения a = 11 и b = 4. Результат должен быть следующим: Пример 2.7. Результат операций div и mod для разных чисел:
В языке С++ допускается явное преобразование типов. Для этого используется команда static_cast<dataType>(value) Здесь — dataType имя типа, к которому нужно преобразовать величину value. В коде программы эта команда используется следующим образом: double x = static_cast<double>(a)/b; Также компилятором С++ поддерживается так называемый Cи-стиль приведения типов данных, когда новый тип указывается в скобках перед именем переменной: double x = (double)a / b; Компилятор C++ также позволяет использовать этот оператор и следующим образом: double x = double(a) / b; Однако такое преобразование считается небезопасным, поскольку компилятор не проверяет выход за границу возможных значений типа. |