Типы с плавающей точкой представляют значения с одиночной, двойной и расширенной точностью. Стандарт определяет минимальное количество значащих цифр. Большинство компиляторов обеспечивает большую точность, чем минимально определено стандартом. Как правило, тип >float
представляется одним словом (32 бита), тип >double
— двумя словами (64 бита), а тип >long double
— тремя или четырьмя словами (96 или 128 битов). Типы >float
и >double
обычно имеют примерно по 7 и 16 значащих цифр соответственно. Тип >long double
зачастую используется для адаптации чисел с плавающей запятой аппаратных средств специального назначения; его точность, вероятно, также зависит от конкретной реализации этих средств.
За исключением типа >bool
и расширенных символьных типов целочисленные типы могут быть знаковыми (signed) или беззнаковыми (unsigned). Знаковый тип способен представлять отрицательные и положительные числа (включая нуль); а беззнаковый тип — только положительные числа и нуль.
Типы >int
, >short
, >long
и >long long
являются знаковыми. Соответствующий беззнаковый тип получают добавлением части >unsigned
к названию такого типа, например >unsigned long
. Тип >unsigned int
может быть сокращен до >unsigned
.
В отличие от других целочисленных типов, существуют три разновидности базового типа >char
: >char
, >signed char
и >unsigned char
. В частности, тип >char
отличается от типа >signed char
. На три символьных типа есть только два представления: знаковый и беззнаковый. Простой тип >char
использует одно из этих представлений. Какое именно, зависит от компилятора.
В беззнаковом типе все биты представляют значение. Например, 8-битовый тип >unsigned char
может содержать значения от 0 до 255 включительно.
Стандарт не определяет представление знаковых типов, но он указывает, что диапазон должен быть поровну разделен между положительными и отрицательными значениями. Следовательно, 8-битовый тип >signed char
гарантированно будет в состоянии содержать значения от -127 до 127; большинство современных машин использует представления, позволяющие содержать значения от -128 до 127.
Подобно языку С, язык С++ был разработан так, чтобы по необходимости программа могла обращаться непосредственно к аппаратным средствам. Поэтому арифметические типы определены так, чтобы соответствовать особенностям различных аппаратных средств. В результате количество возможных арифметических типов в языке С++ огромно. Большинство программистов, желая избежать этих сложностей, ограничивают количество фактически используемых ими типов. Ниже приведено несколько эмпирических правил, способных помочь при выборе используемого типа.
• Используйте беззнаковый тип, когда точно знаете, что значения не могут быть отрицательными.
• Используйте тип >int
для целочисленной арифметики. Тип >short
обычно слишком мал, а тип >long
на практике зачастую имеет тот же размер, что и тип >int
. Если ваши значения больше, чем минимально гарантирует тип >int
, то используйте тип >long long
.
• Не используйте базовый тип >char