Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C_Lect2.doc
Скачиваний:
0
Добавлен:
08.09.2019
Размер:
68.61 Кб
Скачать

2. Типы данных

2.1. Что такое «тип данных»

Если мы говорим: «эта величина имеет такой-то тип», то это значит, что известно множество допустимых значений, которые может принимать величина, и набор операций, которые можно выполнять над этими значениями.

Тип = множество значений + набор допустимых операций.

В языке C определено несколько базовых (встроенных) типов. Это типы char, int, float и double. Сюда же можно отнести указатели, хотя с формальной точки зрения это уже производные типы.

Базвые типы — это виды данных, с которыми умеет непосредственно работать процессор. Поэтому некоторые свойства базовых типов (такие, как диапазон возможных значений или точность представления) зависят от характеристик используемого процессора. Так, младшие модели семейства Intel x86 (≤ 80286) были 16-разрядными. Это значит, что за одно обращение к оперативной памяти процессор мог получить порцию информации размером 16 бит (т. наз. машинное слово). Операции с данными такого размера производятся при выполнении одной машинной команды. Данные большего размера требуют нескольких обращений к памяти для считывания или записи, а их обработка производится не одной, а несколькими последовательно выполняемыми командами.

Более старшие модели Intel x86 (начиная с 80386 и до Pentium IV) стали 32-раз­ряд­ны­ми. Размер слова у них — 32 бита. Однако предусмотрена совместимость с младшими моделями — могут выполняться старые программы, предназначенные для 16-разрядных процессоров. Ради сохранения единой терминологии в семействе Intel x86 «словом» всегда называют 16-разрядный элемент данных, а 32-разрядный элемент называют «двойным словом».

Сейчас в семействе процессоров с архитектурой x86 появились уже 64-разрядные модели, в частности, Intel Pentium IV EM64T и AMD Athlon 64.

2.2 Тип int

int — естественный размер целочисленных данных для процессора (машинное слово). Компиляторы C для 16-разрядных процессоров x86 принимают размер int равным 16 би­там (2 байтам). Компиляторы для 32-разрядных процессоров считают, что int имеет размер 32 бита (4 байта). Соответствующие диапазоны значений:

16 бит: всего 216 значений от –215 до +(2151) (32768 ÷ 32767)

32 бит: всего 232 значений от –231 до +(2311) (2147483648 ÷ 2147483647)

Так как процессор умеет работать и с более короткими данными (т.е. с частями слова), а иногда и с более длинными данными (не обязательно одной командой), то в языке предусмотрено несколько разновидностей типа int. Эти разновидности указываются путем приписывания перед int соответствующих квалификаторов типа:

размер — short, long (short  int  long).

знак — unsigned, signed.

Т.е. можно, например, указать тип unsigned short int — это короткий (16 бит) беззнаковый вариант целочисленных значений (диапазон от 0 до 2161 = 65535).

В языке C действует общее правило: если там, где по правилам синтаксиса должно стоять название типа, оно отсутствует, то подразумевается тип int (т. е. слово int иногда можно опускать). По этому правилу вместо short int можно писать просто short, вместо unsigned long int — unsigned long и т.д.

Размер любого типа или же размер конкретной переменной (в байтах) можно выяснить с помощью операции sizeof:

sizeof(тип) или sizeof переменная

Например, можно выяснить размер типа long int для любого компилятора, вставив в программу такой оператор вывода:

printf ("Размер long int равен %d байт\n", sizeof(long int));

2.3. Тип char

Элемент данных типа char всегда имеет размер 1 байт (8 бит). Это размер наиболее мелкого адресуемого элемента оперативной памяти (т.е. каждый байт памяти имеет собственный адрес).

В действительности тип char — не что иное, как тип целочисленных данных самого короткого размера (диапазон от 0 до 255 либо от 128 до +127; эти варианты, как и в случае int, можно указать с помощью квалификаторов типа: unsigned char и signed char). Однако на практике этот тип обычно используют для представления символьных данных — букв, цифр, знаков препинания, знаков математических операций, специальных символов вроде $, &, @ и т. д.

Совокупность всех возможных символов образует алфавит. Алфавит — это упорядоченный набор символов, т.е. для каждого символа (кроме, быть может, первого и последнего) известно, какой символ ему предшествует и какой является следующим. Упорядочивая один и тот же набор символов разными способами, мы получим разные алфавиты. Тем более разными будут алфавиты, составленные из различающихся наборов символов.

Если задан алфавит (т.е. набор n символов и способ их упорядочивания), то можно пронумеровать символы по порядку от 0 до n1. Тогда на любой символ алфавита можно сослаться, указав его порядковый номер. Именно так и представляются символьные данные в компьютере — вместо самих символов хранятся их порядковые номера в алфавите (называемые кодами символов). Коды зависят от конкретного способа упорядочивания символов, или от их кодировки. Если возможны различные кодировки, то для правильной интерпретации символьных данных необходимо знать, какой именно кодировке они соответствуют.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]