- Типы данных
- Работа
Типы данных
Любой алгоритм, так или иначе, сводится к неким действиям над данными, будь то числа, буквы, звуки, сигналы и т.п. Так как язык программирования служит для реализации алгоритма, он имеет все необходимые средства для манипулирования данными. Для разделения их по видам, введено понятие тип данных. Так как тип не может существовать без данных, а данными в языке Си может быть очень много совершенно разных объектов, далее будем использовать термин объект для обозначения абстрактных данных.
Тип – это идентификатор, обозначающий принадлежность объекта к некой категории, однозначно определяющей содержимое и набор действий, которые можно выполнить над ним. Например, все числа можно разделить на ряд категорий – целые, действительные, комплексные, отрицательные и т.п.
Так как работа процессора и микроконтроллера есть процесс цифровой обработки данных, поэтому так или иначе все разнообразие данных сводится к числам. Даже буквы есть не что иное, как числа, сопоставленные им (грубо говоря, это номер буквы по порядку в алфавите). По этим причинам в языке Си основным видом данных являются числа, которые для удобства разделены на ряд стандартных типов (1):
char – символ, то есть число, занимающее один байт (т.е. 8-битное число)
int – целое число, занимающее 2 байта (т.е. 16-битное число)
long – длинное целое число, занимающее 4 байта (т.е. 32-битное число)
long long – двойное длинное целое число, занимающее 8 байт (т.е. 64-битное число)
float – действительное число, т.е. число с плавающей точкой
double – действительное число удвоенной точности
При помощи дополнительных служебных слов определяются разновидности типов целых чисел:
signed – обозначает, что целое число имеет знак (т.е. может принимать и отрицательные значения)
unsigned – обозначает, что целое число не имеет знака, т.е. может быть только нулем или более
short – обозначает, что фактический размер целого числа вдвое меньше
Таким образом, получаются следующие типы:
unsigned char – число от 0 до 255
signed char – число от -127 до 127
unsigned int – число от 0 до 65535
signed int – число от -32767 до 32764
unsigned long – число от 0 до 4294967295
signed long – число от -2147483648 до 2147483648
и т.д.
Следует отметить, что слово signed, как правило, нет смысла использовать, так как по умолчанию все типы целых чисел имеют знак.
Примечание: тип char стоит особняком – многие версии стандарта Си допускают, что этот тип по умолчанию не имеет знака, что является причиной многих ошибок. Обычно имеется возможность управлять компилятором, переключая тип char со знакового на беззнаковое по умолчанию. Но, чтобы никогда не зависеть от особенностей компилятора, рекомендуется всегда явно указывать signed или unsigned при использовании типа char.
Так же ключевое слово short используется достаточно редко (2) в программировании для микроконтроллеров.
Программист имеет возможность определять новые типы на основе уже определенных, для этого служит ключевое слово typedef, например:
typedef unsigned char byte – определение нового типа byte для обозначения однобайтного числа без знака. То есть сначала следует ключевое слово typedef, затем указывается уже определенный тип, а завершает все идентификатор нового типа.
После такого определения программист может использовать byte наравне с другими типами, в том числе и для нового определения типа.
Все рассмотренные типы считаются простыми типами. Кроме них, имеются и сложные, например, массивы (см. далее), структуры и объединения (см. далее) – они рассмотрены отдельно. Однако все сказанное относится и к ним, т.е. любой сложный тип может использоваться для определения нового типа пользователя.
- Приведены типы, являющиеся стандартными в версии Си для микроконтроллеров AVR
- Ключевое слово short имеет важную роль в системах, для которых тип int не является 16-битным числом (например, для PC-компьютеров). В этом случае тип char соответственно может быть 16-битным, и тогда для получения однобайтного типа необходимо использование short char.