char- единичный байт, который может содержать один символ из допустимого символьного набора;
int- целое, обычно отображающее естественное представление целых в машине;
float- число с плавающей точкой одинарной точности;
double- число с плавающей точкой двойной точности.
Имеется также несколько квалификаторов, которые можно использовать вместе с указанными базовыми типами. Например, квалификаторы short(короткий) и long(длинный) применяются к целым:
short int sh;
long int counter;
В таких объявлениях слово intможно опускать, что обычно и делается. Если только не возникает противоречий со здравым смыслом, short intи long intдолжны быть разной длины, а intсоответствовать естественному размеру целых на данной машине. Чаще всего для представления целого, описанного с квалификатором short, отводится 16 бит, с квалификатором long- 32 бита, а значению типа int- или 16, или 32 бита. Разработчики компилятора вправе сами выбирать подходящие размеры, сообразуясь с характеристиками своего компьютера и соблюдая следующие ограничения: значения типов shortи intпредставляются по крайней мере 16 битами; типа long- по крайней мере 32 битами; размер shortне больше размера int, который в свою очередь не больше размера long.
Квалификаторы signed(со знаком) или unsigned(без знака) можно применять к типу charи любому целочисленному типу. Значения unsignedвсегда положительны или равны нулю и подчиняются законам арифметики по модулю 2 n, где n - количество бит в представлении типа. Так, если значению charотводится 8 битов, то unsigned charимеет значения в диапазоне от 0 до 255, a signed char- от -128 до 127 (в машине с двоичным дополнительным кодом). Являются ли значения типа просто charзнаковыми или беззнаковыми, зависит от реализации, но в любом случае коды печатаемых символов положительны.
Тип long doubleпредназначен для арифметики с плавающей точкой повышенной точности. Как и в случае целых, размеры объектов с плавающей точкой зависят от реализации; float, doubleи long doubleмогут представляться одним размером, а могут - двумя или тремя разными размерами.
Именованные константы для всех размеров вместе с другими характеристиками машины и компилятора содержатся в стандартных заголовочных файлах ‹limits.h›и ‹float.h›(см. приложение B).
Упражнение 2.1. Напишите программу, которая будет выдавать диапазоны значений типов char, short, intи long, описанных как signedи как unsigned, с помощью печати соответствующих значений из стандартных заголовочных файлов и путем прямого вычисления. Определите диапазоны чисел с плавающей точкой различных типов. Вычислить эти диапазоны сложнее.
Целая константа, например 1234, имеет тип int. Константа типа longзавершается буквой lили L, например 123456789L: слишком большое целое, которое невозможно представить как int, будет представлено как long. Беззнаковые константы заканчиваются буквой uили U, а окончание ulили ULговорит о том, что тип константы - unsigned long.
Константы с плавающей точкой имеют десятичную точку (123.4), или экспоненциальную часть (1е-2), или же и то и другое. Если у них нет окончания, считается, что они принадлежат к типу double. Окончание fили Fуказывает на тип float, а lили L- на тип long double.
Целое значение помимо десятичного может иметь восьмеричное или шестнадцатеричное представление. Если константа начинается с нуля, то она представлена в восьмеричном виде, если с 0x или с 0X, то - в шестнадцатеричном. Например, десятичное целое 31 можно записать как 037 или как 0X1F. Записи восьмеричной и шестнадцатеричной констант могут завершаться буквой L(для указания на тип long) и U(если нужно показать, что константа беззнаковая). Например, константа 0XFUL имеет значение 15 и тип unsigned long.
Символьная константаесть целое, записанное в виде символа, обрамленного одиночными кавычками, например 'x'. Значением символьной константы является числовой код символа из набора символов на данной машине. Например, символьная константа '0' в кодировке ASCII имеет значение 48, которое никакого отношения к числовому значению 0 не имеет. Когда мы пишем '0', а не какое-то значение (например 46), зависящее от способа кодировки, мы делаем программу независимой от частного значения кода, к тому же она и легче читается. Символьные константы могут участвовать в операциях над числами точно так же, как и любые другие целые, хотя чаще они используются для сравнения с другими символами.
Читать дальше