Тема 5. Стандартные типы данных
Данные – это объекты, которые обрабатываются в программе.
В языке Си есть два вида данных: константы и переменные.
Константа – данное, которое не может меняться в процессе работы программы. Тип и значение константы однозначно определяются её изображением в программе. Константы в программе записываются: в виде целых или вещественных чисел; в виде символьных констант; в виде строковых констант; в виде стандартных имен констант; в виде определённых в программе имён констант.
Переменная – данное, которое может меняться в процессе выполнения программы, например путём присваивания ей значения выражения. В тексте программы переменные обозначаются с помощью имён.
В программе на языке Си для каждого данного должен быть определён его тип. Тип данного определяет возможные значения данного и допустимые операции, которые можно применять к этим значениям.
В языке Си различают понятия "тип данных" и "модификатор типа". Тип данных - это, например, целый, а модификатор - со знаком или без знака. Целое со знаком будет иметь как положительные, так и отрицательные значения, а целое без знака - только положительные значения. В языке Си можно выделить пять базовых типов, которые задаются следующими ключевыми словами:
· char - символьный;
· int - целый;
· float - вещественный;
· double - вещественный двойной точности;
· void - не имеющий значения.
Дадим им краткую характеристику:
1. Переменная типа char имеет размер 1 байт, ее значениями являются различные символы из кодовой таблицы, например: 'ф', ':', 'j' (при записи в программе они заключаются в одинарные кавычки).
2. Размер переменной типа int в стандарте языка Си не определен. В большинстве систем программирования размер переменной типа int соответствует размеру целого машинного слова. Например, в компиляторах для 16-разрядных процессоров переменная типа int имеет размер 2 байта. В этом случае знаковые значения этой переменной могут лежать в диапазоне от -32768 до 32767.
3. Ключевое слово float позволяет определить переменные вещественного типа. Их значения имеют дробную часть, отделяемую точкой, например: -5.6, 31.28 и т.п. Вещественные числа могут быть записаны также в форме с плавающей точкой, например: -1.09e+4. Число перед символом "е" называется мантиссой, а после "е" - порядком. Переменная типа float занимает в памяти 32 бита. Она может принимать значения в диапазоне от 3.4е-38 до 3.4e+38.
4. Ключевое слово double позволяет определить вещественную переменную двойной точности. Она занимает в памяти в два раза больше места, чем переменная типа float (т.е. ее размер 64 бита). Переменная типа double может принимать значения в диапазоне от 1.7e-308 до 1.7e+308.
5. Ключевое слово void (не имеющий значения) используется для нейтрализации значения объекта, например, для объявления функции, не возвращающей никаких значений.
Объект некоторого базового типа может быть модифицирован. С этой целью используются специальные ключевые слова, называемые модификаторами. В стандарте ANSI языка Си имеются следующие модификаторы типа:
· unsigned
· signed
· short
· long
Модификаторы записываются перед спецификаторами типа, например: unsigned char. Если после модификатора опущен спецификатор, то компилятор предполагает, что этим спецификатором является int. Таким образом, следующие строки:
long а;
long int а;
являются идентичными и определяют объект а как длинный целый. Табл. 7 иллюстрирует возможные сочетания модификаторов (unsigned, signed, short, long) со спецификаторами (char, int, float и double), а также показывает размер и диапазон значений объекта (для 16-разрядных компиляторов).
Таблица 7.
Типы данных языка Си
Тип | Размер в байтах (битах) | Диапазон значений | Знаковый (может ли хранить отрицательные числа) |
char | 1 (8) | от -128 до 127 | Да |
unsigned char | 1 (8) | От 0 до 255 | Нет |
signed char | 1 (8) | от -128 до 127 | Да |
int | 2 (16) | от -32768 до 32767 | Да |
unsigned int | 2 (16) | от 0 до 65535 | Нет |
signed int | 2 (16) | от -32768 до 32767 | Да |
short int | 2 (16) | от -32768 до 32767 | Да |
unsigned short int | 2 (16) | от 0 до 65535 | Нет |
signed short int | 2 (16) | от -32768 до 32767 | Да |
long int | 4 (32) | от -2147483648 до 2147483647 | Да |
unsigned long int | 4 (32) | от 0 до 4294967295 | Нет |
signed long int | 4 (32) | от -2147483648 до 2147483647 | Да |
float | 4 (32) | от 3.4е-38 до 3.4е+38 | Нет |
double | 8 (64) | от 1.7-308 до 1.7+308 | Нет |
long double | 10 (80) | от 3.4Е-4932 до 3.4Е+4932 | Нет |
Константы вещественного типа записываются в двух формах: в виде вещественных дробных чисел без десятичного порядка; в виде вещественных чисел с десятичным порядком. Вещественные дробные константы без десятичного порядка представляются синтаксической диаграммой (рис.25).
|
Где «Цифра1» – цифра (0,1,…, 9) целой части числа;
«Цифра2» – цифра дробной части числа.
Пример 12. Вещественные константы без десятичного порядка на языке Паскаль: –2.45, +33.668, 0.04, 0.0453.
Вещественное число с десятичным порядком представляется диаграммой (рис.26):
|
Здесь «Цифра1» – цифры целой части мантиссы;
«Цифра2» – цифры дробной части мантиссы;
Е – признак десятичного порядка;
«Цифра3» – цифры десятичного порядка.
Приведем примеры вещественных чисел с десятичным порядком:
1. Вещественное число 45,3·10–3 может представляться на языке Си в виде вещественной константы с десятичным порядком следующим образом: +45.3E–3 или 4.53E–2 или 0.453E–1.
2. Вещественное число –45·104 может быть представлено на языке Си в виде вещественной константы с десятичным порядком следующим образом:
–45E4 или –4.5E5 или –0.45E+6.
Количество значащих цифр в вещественной константе и величина порядка зависят от разновидности вещественного числа и определяются в соответствии с приведенной ранее таблицей.