×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 30 из 714 Настройки

и тип >bool в арифметических выражениях. Используйте их только для хранения символов и логических значений. Вычисления с использованием типа >char особенно проблематичны, поскольку на одних машинах он знаковый, а на других беззнаковый. Если необходимо маленькое целое число, явно определите тип как >signed char или >unsigned char.

• Используйте тип >double для вычислений с плавающей точкой. У типа >float обычно недостаточно точности, а различие в затратах на вычисления с двойной и одиночной точностью незначительны. Фактически на некоторых машинах операции с двойной точностью осуществляются быстрее, чем с одинарной. Точность, предоставляемая типом >long double, обычно чрезмерна и не нужна, а зачастую влечет значительное увеличение продолжительности выполнения.

Упражнения раздела 2.1.1

Упражнение 2.1. Каковы различия между типами >int, >long, >long long и >short? Между знаковыми и беззнаковыми типами? Между типами >float и >double?

Упражнение 2.2. Какие типы вы использовали бы для коэффициента, основной суммы и платежей при вычислении выплат по закладной? Объясните, почему вы выбрали каждый из типов?

2.1.2. Преобразование типов

Тип объекта определяет данные, которые он может содержать, и операции, которые с ним можно выполнять. Среди операций, поддерживаемых множеством типов, есть возможность преобразовать (convert) объект данного типа в другой, связанный тип.

Преобразование типов происходит автоматически, когда объект одного типа используется там, где ожидается объект другого типа. Более подробная информация о преобразованиях приведена в разделе 4.11, а пока имеет смысл понять, что происходит при присвоении значения одного типа объекту другого.

Когда значение одного арифметического типа присваивается другому

>bool b = 42;          // b содержит true

>int i = b;            // i содержит значение 1

>i = 3.14;             // i содержит значение 3

>double pi = i;        // pi содержит значение 3.0

>unsigned char с = -1; // при 8-битовом char содержит значение 255

>signed char c2 = 256; // при 8-битовом char значение c2 не определено

происходящее зависит от диапазона значении, поддерживаемых типом.

• Когда значение одного из не логических арифметических типов присваивается объекту типа >bool, результат будет >false, если значением является >0, а в противном случае — >true.

• Когда значение типа >bool присваивается одному из других арифметических типов, будет получено значение >1, если логическим значением было >true, и >0, если это было >false.

• Когда значение с плавающей точкой присваивается объекту целочисленного типа, оно усекается до части перед десятичной точкой.

• Когда целочисленное (интегральное) значение присваивается объекту типа с плавающей точкой, дробная часть равна нулю. Если у целого числа больше битов, чем может вместить объект с плавающей точкой, то точность может быть потеряна.

• Если объекту беззнакового типа присваивается значение не из его диапазона, результатом будет остаток от деления по модулю значения, которые способен содержать тип назначения. Например, 8-битовый тип >unsigned char