К специальным значениям относятся денормализованные вещественные числа, нули, отрицательные и положительные бесконечности, нечисла, неопределенность и неподдерживаемые форматы. Для представления специальных значений зарезервированы минимальный 00000... 00 и максимальный 111...11 смещенные порядки.
1). Денормализованные вещественные числа. Это числа, которые меньше минимального нормализованного числа для каждого вещественного формата. Такие числа имеют минимальный смещенный порядок и ненулевую мантиссу.
2). Истинный нуль. Значение нуль в вещественных и десятичном форматах является знаковым, а двоичный целый нуль всегда положительный. В вычислениях знак нуля не учитывается, и обычно программист может не заботиться о наличии знакового нуля. Нуль в вещественных форматах кодируется с нулевым смещенным порядком и мантиссой.
3). Бесконечность. Вещественные форматы поддерживают знаковые представления бесконечностей. Эти значения кодируются со смещенным порядком из всех единиц 1111...11 и мантиссой 1.000...00. Знаки бесконечностей учитываются и сравнения возможны.
4). Нечисла. Нечисло является представителем класса специальных значений, существующих только в вещественных форматах. Оно имеет смещенный порядок из всех единиц, любой знак и любую мантиссу за исключением 1.000..00.
Арифметическое устройство формирует специальное нечисло, называемое неопределенностью, реагируя на замаскированный особый случай недействительной операции. Оно имеет отрицательный знак, смещенный порядок 111...111, а мантисса равна 1.1000...00. Неопределенность предусмотрена для вычислительных ситуаций, в которых человек говорит "не знаю", например деление 0 на 0.
5). Неподдерживаемые форматы. Формат РТ имеет много двоичных наборов, которые не попадают ни в один из ранее рассмотренных классов.
Переменные вещественных (или действительных) типов определяются в языках Си/Си++ следующим образом:
float f1; // плавающий (вещественный) тип обычной точности (4 байта)
double d2; // плавающий тип двойной точности (8 байт)
long float LF; // то же, что double
long double Ld; // длинный плавающий двойной точности (10 байт)
Логический тип данных (в языке Паскаль – BOOLEAN) представляет одно из двух истинных логических значений (истина/ложь). Эти значения обозначаются посредством стандартных идентификаторов
true (истина);
false (ложь).
Над значениями булевского типа допускаются операции сравнения, причем считается, что false < true. Кроме того, имеются четыре стандартные логические операции, обозначаемые служебными словами:
and – логическое умножение;
or – логическое сложение;
xor – сложение по модулю 2 (исключающее или);
not – логическое отрицание.
Для запоминания логического значения достаточно одного бита. Однако с целью убыстрения доступа к логическому значению его представление в памяти может быть избыточным.
В более поздних реализациях компиляторов языка Паскаль, например Турбо Паскаль 7.0, добавлено еще три логических типа: ByteBool (размер 1 байт), WordBool (размер – 2байта) и LongBool (размер 4 байта). Они введены для унификации с другими языками программирования и с операционной системой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа. Значению FALSE соответствует число , записанное в соответствующее количество байтов. Значению же TRUE для типа BOOLEAN соответствует число 1, записанное в его байт, а для других типов значению TRUE соответствует любое число, отличное от нуля.
В ранних версиях языков Си и Си++ не было специального типа для представления логических значений. Все целые типы, включая символьные, могут использоваться для представления логических значений. Нулевое значение означает «ложь», любое ненулевое, включая отрицательное – «истина». В более поздних версиях языка Си++ введён логический тип bool, аналогичный типу boolean в Паскале.