Лекции. Основные понятия и определения
Скачать 1.94 Mb.
|
3.1. Типы данныхТип – множество допустимых значений и операций над ними. Элемент какого-либо типа: переменная | константа | литерал. Тип литерала определяется его изображением, для переменной необходима специальная конструкция языка – описание, константы в пособии не рассматриваются. Внимание! Все переменные должны быть описаны до их использования (по описаниям выделяется память для них). Большинство типов имеют определенный в языке набор операций, реализованных в виде операторов или функций. Существуют определенные в языке типы данных (так называемые предопределенные) и типы, задаваемые пользователем (о них позже). 3.1.1. ЦелыеЭто семейство типов, значения которых являются целыми. Типы различаются диапазоном значений и объемом выделяемой под элемент памяти.
Замечание 1. В языках C и C++ для всех целых типов существует модификатор unsigned, в рассматриваемых версиях языка Basic типы Byte, UShort, UInteger, ULong, которые запрещают соответствующим типам принимать отрицательные значения. При этом изменяется диапазон представления значений. unsigned char, Byte→ 0 – 255 unsigned short, UShort→ 0 – 65535 unsigned [int] | unsigned long, UInteger→ 0 - 4294967295 ULong → 0 – 264-1 В качестве литералов в обоих языках могут употребляться числа в 10-чной, 8-чной и 16-чной системах счисления. Признак 8-чного литерала в языке Basic – префикс &o (буква "o”), в языке C – 0 (цифра "0"), 16-ного: Basic -- &h, C – 0{x|X}. Пример. -1 2345 9999999999 → 10 &o7777 → Basic 07777 → C → 8 &hab → Basic 0xab 0Xab → C → 16 3.1.2. Данные с плавающей точкойЭто семейство типов, значения которых являются вещественными (дробными). Типы различаются диапазоном значений и объемом выделяемой под элемент памяти.
Замечание. Типы double и long double в изучаемой версии языка C не отличаются. Тип long double введен для совместимости со стандартом языка, поэтому его употреблять не рекомендуется. Литералы имеют 2 формы записи: - обычную: [+|-]<целая часть>.<дробная часть> и экспоненциальную или показательную: <мантисса>e<степень>, где мантисса – это целое число или число с плавающей точкой в обычной форме, e означает 10 в степени (регистр не важен), степень – целое число. Все литералы с плавающей точкой относятся к типу double. Пример. -2.3 5e-15 -2.245E12 0.0002 .0002 (в Basic–>0.0002 среда корректирует) В языке С допустима запись вида 26., чтобы избежать дополнительного преобразования. Несмотря на различные формы записи литералов (внешнего представления) данные этого типа хранятся в памяти компьютера в форме с плавающей точкой (мантисса, порядок), отсюда и произошло название типа. Замечание 1. В языке C разделитель между целой и дробной частью числа или мантиссы в виде десятичной точки может отсутствовать только при наличии степени (экспоненты). Если отсутствуют и точка, и степень, это означает литерал целого типа. Замечание 2. Basic. Весьма важно!!! Во многих странах, в том числе и в нашей, в качестве десятичного разделителя используется символ ",". Более того, многие программы, например Microsoft Excel, используют в этом качестве установки ОС, которые могут быть изменены. В результате при вводе данных с клавиатуры или выводе их на экран (печать) используются установки ОС, однако при задании литералов в тексте программы необходимо употреблять в качестве разделителя точку. Эти проблемы также возникнут при работе с датами, временем, денежными единицами. 3.1.3. Логический типИспользуется для задания логических условий и свойств объектов. Описывается ключевыми словами bool в языке C++ и Boolean в языке Basic. Литералы этого типа имеют только 2 значения: true (истина) иfalse (ложь). Basic: в памяти занимают 2 байта (16 разрядов) и хранятся в виде True (-1), False (0). C++: в памяти занимают 1 байт (8 разрядов) и хранятся в виде true (1), false (0). Замечание. В стандарте языка C логический тип не предусмотрен, однако в этом качестве можно использовать любую модификацию целого типа. Если значение условия не равно 0, то считается, что оно имеет значение true, если равно 0, то – значение false. 3.1.4. Символьные данныеРазличают представления отдельных символов и последовательностей символов (строк). 1 символ занимает в памяти 1 байт. Каждый символ кодируется целым значением в диапазоне: 0 – 255. Символы с кодами от 0 до 127 представляют собой международную кодовую таблицу ASCII, которая едина для всех стран. Диапазон 128 – 255 содержит символы национальных алфавитов, спецсимволы и др. Эта кодовая страница специфична для различных стран. Замечание. В обоих языках существует набор символов, каждый из которых занимает в памяти 2 байта. Они используются для представления символов национальных алфавитов, в основном, иероглифического типа (Япония, Китай, Корея и т.п.). Такая кодировка носит название Unicode. В В языке C литерал одиночного символа имеет вид: ‘символ’. Для записи символов, не имеющих графического представления или приводящих к неправильной трактовке, используется формат вида ‘\символ’. Пример. ‘a’ ‘C’ ‘\’’ ‘\”’ ‘\\’ ‘\n’ – новая строка, ‘\t’ – табуляция, ‘\r’ – возврат каретки (переход к началу той же строки). Для переменных используется ключевое слово char. В языке Basic для одиночных символов также применяется тип char, однако он требует 2-х байтов памяти и не относится к целому типу. Литерал для одиночного символа имеет вид “<символ>”C. Пример. “a”C Для задания символа “ (кавычка) надо записывать так: “”””C. Для строк (последовательностей символов) в обоих языках формат записи литералов одинаков: "<строка>" Пример. "Это строка!" "Запись в Си и Бэйсике одинакова" Для включения в языке Basic в строчный литерал " (кавычки) ее надо дублировать. В языке C для того, чтобы транслятор мог обнаружить конец строки в памяти, он добавляет в ее "хвост" символ '\0', поэтому строка имеет длину на 1 байт больше. Пример. "Это строка!" – длина 12 байтов. Замечание. В языке C следует различать записи 0 и '0'. В первом случае значение в памяти будет действительно равно 0, во втором – 48 – ASCII-код символа 0. Записи 0 и '\0' равнозначны. В языке C два подряд расположенных строчных литерала автоматически объединяются в 1 строку. Пример. "Уральский социально-экономический институт" "Академии труда и социальных отношений" Это 1 строка! Для представления переменных, значениями которых являются одиночные символы, в языке C используется тип unsigned char (character), который в общем случае относится к целому типу. Переменных, значениями которых являются строки, в языке C нет. Для этой цели используются массивы данных типа char (о них позже). В языке Basic для строк применяется тип String. Максимальная длина таких строк может достигать 2 млн символов. Отметим, что для работы со строками так же, как и в языке C, можно использовать массивы типа Char. 3.1.5. Дополнительные типы данныхОписанные выше типы данных можно считать основными. Они используются в той или иной форме во всех языках программирования. В языке C (C++) определены также следующие типы: указатели, ссылки, перечисления (enum), void; в языке Basic: перечисления (Enum), даты (Date), универсальный (Object) и десятичный (Decimal). Они будут введены позже по ходу изложения. |