А теперь попробуем ввести в последнем поле, где указывается число рублей, значение 1000, и снова попробуем пересчитать его в доллары. Получится 33 (доллара). Правильно ли это? Увы, нет! Даже на первый взгляд видно, что число 1000 на 33 нацело не делится, и результат должен быть дробным. Мы должны были бы получить 33,33333...

Другие типы для целых чисел

— В чем же дело? Может быть, в текст программы вкралась и затаилась какая-то логическая ошибка?

— Да, так и есть. Только ошибка допущена не на стадии программирования, а на стадии проектирования, когда калькулятор еще только задумывался.

Дело в том, что тип int, который мы использовали для описания переменных, в которых хранятся результаты вычислений, допускает работу только с целыми числами в диапазоне от -2 147 483 648 до 2 147 483 647, а в программе в результате расчета получилось число с дробной частью. В Си++ принято, что при делении целого числа на целое всегда получается тоже целое число (дробная часть просто отбрасывается). То есть получившееся дробное число 33,3333 было преобразовано в целое число 33.

h00671.jpg

— Почему значения целых чисел лежат именно в диапазоне от -2 147 483 648 до 2 147 483 647?

— Вы наверное слышали, что процессор Pentium — 32-разрядный. Что это означает? Применительно к нашему случаю это означает, что он работает с числами, которые представлены в диапазоне от 0 до 232 -1, а именно от 0 до 4 294 967 295 (для этого в Си++ есть специальный тип, называемый unsigned long). Чтобы охватить и отрицательные целые числа, надо этот диапазон поделить примерно пополам — отсюда и берутся границы от -2 147 483 648 до 2 147 483 647.

Для разных версий языка Си++ допустимые диапазоны значений различных типов могут различаться. В этой книге рассматриваются диапазоны, принятые в системе Borland C++Builder.

Два миллиарда с «хвостиком» — это, конечно, маловато. Даже бюджет нашей страны не подсчитать. Поэтому в C++Builder используют и ^другие типы чисел, в частности, тип _int64, который позволяет работать с числами в диапазоне от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807. Столь больших значений для решения обыденных задач вполне достаточно..

67