Основные типы данных
Переменные и константы. Типы данных
Ошибки
Ошибки, допускаемые при написании программ, разделяют на синтаксические и логические.
Синтаксические ошибки - нарушение формальных правил написания программы на конкретном языке, обнаруживаются на этапе трансляции и могут быть легко исправлены.
Программа, содержащая синтаксическую ошибку, не может быть запущена. При попытке ее компиляции выдается сообщение, обычно содержащее указание того места в тексте, "дочитав" до которого, компилятор заметил ошибку; сама ошибка может быть как в этом месте, так и выше него (часто - в предыдущей строке).
Логические ошибки делят на ошибки алгоритма и семантические ошибки - могут быть найдены и исправлены только разработчиком программы.
Причина ошибки алгоритма - несоответствие построенного алгоритма ходу получения конечного результата сформулированной задачи.
Причина семантической ошибки - неправильное понимание смысла (семантики) операторов языка.
Программа, содержащая логическую ошибку, может быть запущена. Однако она либо выдает неверный результат, либо даже завершается "аварийно" из-за попытки выполнить недопустимую операцию (например, деление на 0) - в таком случае выдается сообщение об ошибке времени выполнения. Поиск места в программе, содержащего логическую ошибку, является непростой задачей; он носит название отладки программы.
Для программиста на языке Си память компьютера представляется как набор ячеек, каждая из которых называется переменной, или константой, в зависимости от того, меняется ее значение в процессе работы или нет. Каждая переменная имеет имя (идентификатор, ID). Константа может иметь или не иметь имени.
Род информации, которую способна хранить ячейка, определяется ее типом.
Данные в языке Си разделяются на две категории: простые (скалярные), будем их называть базовыми, и сложные (составные) типы данных.
Тип данных определяет:
•внутреннее представление данных в оперативной памяти;
•совокупность значений (диапазон), которые могут принимать данные этого типа;
•набор операций, которые допустимы над такими данными.
Основные типы базовых данных: целый – int, вещественный с одинарной точностью – floatи символьный – char.
В свою очередь, данные целого типа могут быть короткими – short, а также длинными – long и еще более длинными - long long. Кроме того, при любой длине данные целых и символьного типов могут быть знаковыми - signed либо беззнаковыми – unsigned (по умолчанию они считаются знаковыми, поэтому слово signed необязательно и обычно опускается). Вещественные же данные могут иметь удвоенную точность – double или еще большую точность - long double.
В языке С++ введен также логический тип bool.Данные этого типа могут принимать лишь два значения: true (истина) и false (ложь).
Сложные типы данных – массивы, структуры – struct, объединения или смеси – union.
Данные целых и вещественных типов находятся в определенных диапазонах, т.к. занимают разный объем оперативной памяти. Вещественные типы при этом обладают еще конечной точностью хранения данных, т.е. верно хранят лишь первые несколько цифр числа; для хранения остальных (чье количество бывает даже бесконечным - например, у числа π , или у числа ⅓ ) не хватает места. В Табл. 1. приведены свойства различных типов для системы программирования C++ Builder. В других системах программирования, поддерживающих язык Си, может отличаться размер того или иного конкретного типа, например int, и соответственно будет отличаться его допустимый диапазон значений (например, тип long int может превосходить по размеру тип int). Однако последовательность возрастания размеров и точности для каждой группы типов всегда одинакова:
char ≤ short int ≤ int ≤ long int ≤ long long int
float ≤ double ≤ long double
Таблица 1.
Тип данных | Размер (байт) | Диапазон значений | Точность, десятичных знаков |
сhar | -128 … 127 | ||
unsigned сhar | 0 … 255 | ||
short int | -215… 215–1 (-32768…32767) | ||
int | -231…231–1 (-2147483648…2147483647) | ||
long int | -231…231–1 (-2147483648…2147483647) | ||
long long int | –263... 263–1 (примерно ) | ||
unsigned short int | 0…216–1 (0…65535) | ||
unsigned int | 0…232–1 (0…4294967295) | ||
unsigned long int | 0…232–1 (0…4294967295) | ||
unsigned long long int | 0…264–1 (примерно ) | ||
float | ±3,14*10-38…±3,14*1038 | 7-8 | |
double | ±1,7 *10-308… ±1,7 *10308 | 15-16 | |
long double | ± 1,1 * 10-4932… ± 1,1 * 104932 | 19-20 |
Заметим, что для целочисленных типов данных, чье название содержит слово int и еще какое-либо слово перед ним, слово int можно не писать, и обычно оно опускается (в Табл.1 необязательное int указано мелким шрифтом).
2.2. Декларация (объявление) объектов
Все объекты (переменные, функции и пр.), с которыми работает программа, в языке Си необходимо декларировать, т.е. объявить компилятору об их присутствии в программе. При этом возможны две формы декларации:
- описание, не приводящее к выделению памяти;
- определение, при котором под объект будет выделен объем оперативной памяти, в соответствии с его типом; в этом случае объект можно сразу инициализировать, т.е. задать его начальное значение.
Кроме констант, которые можно задавать в исходном тексте, все объекты программы должны быть явно декларированы по следующему формату:
<атрибуты> <список ID объектов>;
элементы списка разделяются запятыми, а атрибуты - разделителями. Например: int i,j,k; float a,b;
Объекты программы в общем случае имеют следующие атрибуты:
<класс памяти> - характеристика способа размещения объектов в памяти (статическая, динамическая), определяет область видимости и время жизни переменной (по умолчанию - auto), данные атрибуты будут рассмотрены позже;
<тип> - характеристика механизма интерпретации данных, т.е. это совокупность информации о том, сколько объекту нужно выделить памяти, какой вид имеет представление информации и какие действия над ней допустимы (по умолчанию - int).
Класс памяти и тип – атрибуты необязательные и могут отсутствовать, тогда их значения установятся по умолчанию.
Примеры декларации простых переменных:
int i,j,k;
char r;
double gfd;