
Алгоритмические языки.Лекция 2.Презентация2.ppt
- Количество слайдов: 23
Тема № 2. Базовые типы данных. Определения и описания языка Си++
2. 1. Базовые типы данных Классификация: • целые – беззнаковые • • unsigned char unsigned short unsigned int unsigned long – знаковые • • • char short int long вещественные • • • float double long double
Тип данных Размер, бит Диапазон значений Примечание -назначение типа unsigned char 8 0. . . 255 Небольшие целые числа и коды символов char 8 -128. . . 127 Небольшие целые числа и коды символов unsigned short 16 0. . . 65535 Целые числа без знака unsigned int 32 (16 DOS) 0. . . 4294967295 Целые числа без знака 16 -32768. . . 32767 Целые числа со знаком 32 (16 DOS) -2147483648. . . 2147483647 32 0. . . 4294967295 short int unsigned long Целые числа со знаком Целые числа без знака
long 32 -2147483648. . . 2147483647 float 32 3. 4 Е-38…. . . 3. 4 Е+38 Расчеты точность 7 значащих цифр double 64 1. 7 Е-308. . . …. . 1. 7 Е+308 Расчеты точность 15 значащих цифр long double 80 3. 4 Е-4932. . . 1. 1 Е+4932 Целые числа со знаком Расчеты точность 19 значащих цифр
Кроме данных типов в Си существует перечисляемый тип, который задается следующим образом: enum <имя_типа> { <имя 1>[=<инициализатор1>], <имя 2>[=<инициализатор2>], ………………. <имя. N>[=<инициализатор. N>] }; <имя 1>, <имя 2>, …, <имя. N> -выступают далее в качестве констант, по умолчанию первая константа инициализируется 0, каждая последующая на 1 больше. Переменные заданного типа могут принимать значения только из множества констант. Этот тип отдельно в качестве базовых можно не рассматривать, так как он сводится к типу int.
Примеры: enum A { a, //=0 b, //=1 c=5, //=5 d }; //=6 A x; x=b;
Дополнительно введены платформеннонезависимые целые типы: __int 8 unsigned __int 8 __int 16 unsigned __int 16 __int 32 unsigned __int 32 __int 64 unsigned __int 64 Также введен тип bool
2. 2. Понятие о производных типах Из базовых типов с помощью знаков операций: * & [] () и механизмов определения структурированных типов данных (классов, структур, объединений) можно конструировать множество производных типов. Примеры: <type> * <имя>; - указатель <type> <имя>[<константа>]; - массив <type> * <имя>[<константа>]; - массив указателей <type> (* <имя>)[<константа>]; - указатель на массив
struct <имя> { ……. . }; - структура union <имя> { ……. . }; - объединение class <имя> { ……. . }; - класс ……………
2. 3. Атрибуты объектов Под объектом в данном случае понимается поименованная область памяти (переменная, функция, массив и т. п. ) Кроме типов для объектов явно или по умолчанию определяются следующие атрибуты: – класс памяти; – область (сфера) действия, связанного с объектом идентификатора (имени); – область видимости объекта; – продолжительность существования объекта; – тип компоновки (связывания).
2. 3. 1. Класс памятив памяти и Класс памяти определяет размещение объектов другие атрибуты объектов. Для явного задания классов памяти используются следующие модификаторы: – auto – автоматическая или локальная память; – register – регистровая память; – static – «статическая» память, внутренний тип компоновки и статическая продолжительность существования; – extern – «внешняя» память, внешний тип компоновки и статическая продолжительность существования. Если класс памяти явно не определен, то для переменных, определенных вне блоков класс памяти – extern, а для определенных внутри блоков – auto.
2. 3. 2. Область (сфера) действия, связанного с объектом идентификатора Это часть программы, в которой идентификатор может быть использован для доступа к связанному с ним объекту. 1. Идентификатор описан в блоке: ОД от точки описания до конца блока, за исключением внутренних блоков, в которых идентификатор используется повторно. Если блок – тело функции, то в нем определены и указанные в заголовке формальные параметры функции. 2. Идентификатор описан вне блока: ОД от точки описания до конца файла.
2. 3. 3. Область видимости объекта Часть программы, в которой к объекту можно напрямую обращаться по его идентификатору. Понятие видимости введено в связи с возможностью повторного использования идентификатора внутри вложенных блоков в качестве имени для другого объекта. «Область видимости» «≤» «Области действия» Существует операция изменения области видимости. Ее формат: : : <идентификатор>
2. 3. 4. Продолжительность существования объекта – статическая (классы памяти static, extern); – локальная (классы памяти auto, register); – динамическая.
2. 3. 5. Тип компоновки (связывания) Определяет соответствие идентификатора конкретному объекту в программе, исходный текст которой размещен в нескольких файлах. Два вида связывания: • внутреннее, к объекту можно обращаться только в одном файле проекта; • внешнее, к объекту можно обращаться из различных файлов проекта.
Взаимосвязь классов памяти и других атрибутов Класс памяти Атрибуты объектов Область действия auto register static extern Видимость Продолжитель ность существования Тип связывания Внутреннее связывание От точки описания до конца блока, за исключением внутренних блоков, где имя используется повторно От точки описания до конца блока (за иск. внутр. блоков, где имя используется повторно) Локальная От точки описания до конца файла (блока) за иск. внутр. блоков, где имя используется повторно Статическая Внешне связывание
2. 4. Определения и описания Определения устанавливают атрибуты объектов, резервируют для них память и связывают объекты с именами идентификаторами. Описания делают известными компилятору, указанные в них идентификаторами. Определять объект можно 1 раз, описывать множество раз.
Признаки определения переменных: – объявлена переменная без модификатора extern; – объявлена переменная с инициализатором.
Признаки описания переменных: – наличие модификатора extern (инициализация запрещена).
2. 5. Определения и описания переменных стандартных типов Общий формат определения (описания) переменных: [<спецификатор_класса_памяти>] [<модификатор>] <тип> <имя 1>[=<иниц1>], <имя 2>[=<иниц2>], …, <имя. N>[=<иниц. N>]; Модификаторы: const и volatile. Примеры: int i, j=10; const float pi=3. 14; // Запрещено pi=10. 5 extern double x; // Описание unsigned char C 1=‘A’, C 2=10, C 3;
2. 6. Преобразования типов Си+ - язык со слабой типизацией, допустимы неявные преобразования любого стандартного типа в другой любой стандартный тип. Неявные преобразования типов Примеры: double x=10. 5; char Ch=x; // Допустимо int i=x, j=Ch; long L=1050; unsigned char C 1=L;
Правила преобразования стандартныхменее длинный целый: отсекаются типов Преобразование более длинного целого типа в старшие биты. Преобразование менее длинного целого типа в более длинный целый: если преобразуется без знаковый тип, то старшие биты заполняются 0, если знаковый, то битом знака. При преобразовании целых типов одинаковой длины, содержимое не меняется, может меняться интерпретация знакового бита Преобразование менее длинного вещественного в более длинное: мантисса дополняется нулями справа. Преобразование более длинного вещественного в менее длинное: усечение младших битов мантиссы, если значение слишком велико – результат не определен. Преобразование вещественного к целому: дробная часть отбрасывается, и результат преобразуется в long, далее работают правила для целых, если значение слишком велико – результат не определен. Преобразование целых к вещественным: преобразование к long, далее к вещественному, возможна потеря точности.
Явное преобразование типов Существует операция явного преобразования типа, ее формат: (<тип>) <операнд> или <тип>(<операнд>) Примеры: int a=129; char c=(char) a; float x=float( c );
Алгоритмические языки.Лекция 2.Презентация2.ppt