и тип >bool
в арифметических выражениях. Используйте их только для хранения символов и логических значений. Вычисления с использованием типа >char
особенно проблематичны, поскольку на одних машинах он знаковый, а на других беззнаковый. Если необходимо маленькое целое число, явно определите тип как >signed char
или >unsigned char
.
• Используйте тип >double
для вычислений с плавающей точкой. У типа >float
обычно недостаточно точности, а различие в затратах на вычисления с двойной и одиночной точностью незначительны. Фактически на некоторых машинах операции с двойной точностью осуществляются быстрее, чем с одинарной. Точность, предоставляемая типом >long double
, обычно чрезмерна и не нужна, а зачастую влечет значительное увеличение продолжительности выполнения.
Упражнение 2.1. Каковы различия между типами >int
, >long
, >long long
и >short
? Между знаковыми и беззнаковыми типами? Между типами >float
и >double
?
Упражнение 2.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