Опубликован: 05.07.2006 | Доступ: свободный | Студентов: 4688 / 889 | Оценка: 4.12 / 3.74 | Длительность: 18:59:00
Лекция 3:

Типы, операции и выражения

Аннотация: Изучаются конструкции языка, рассматриваются возможности представления данных в языке C и операции над ними.

2. Типы, операции и выражения

Переменные и константы являются основными объектами, с которыми оперирует программа. описания перечисляют переменные, которые будут использоваться, указывают их тип и, возможно, их начальные значения. Операции определяют, что с ними будет сделано. Выражения объединяют переменные и константы для получения новых значений. Все это - темы настоящей лекции.

2.1. Имена переменных

Хотя мы этого сразу прямо не сказали, существуют некоторые ограничения на имена переменных и символических констант. Имена составляются из букв и цифр; первый символ должен быть буквой. Подчеркивание "_" тоже считается буквой; это полезно для удобочитаемости длинных имен переменных. Прописные и строчные буквы различаются; традиционная практика в "с" - использовать строчные буквы для имен переменных, а прописные - для символических констант.

Играют роль только первые восемь символов внутреннего имени, хотя использовать можно и больше. Для внешних имен, таких как имена функций и внешних переменных, это число может оказаться меньше восьми, так как внешние имена используются различными ассемблерами и загрузчиками. Детали приводятся в "приложении А" . Кроме того, такие ключевые слова как if, else, int, float и т.д., зарезервированы: вы не можете использовать их в качестве имен переменных. (Они пишутся строчными буквами).

Конечно, разумно выбирать имена переменных таким образом, чтобы они означали нечто, относящееся к назначению переменных, и чтобы было менее вероятно спутать их при написании.

2.2. Типы и размеры данных

В языке C имеется только несколько основных типов данных: char один байт, в котором может находиться один символ из внутреннего набора символов. int Целое, обычно соответствующее естественному размеру целых в используемой машине. float С плавающей точкой одинарной точности. double С плавающей точкой двойной точности.

Кроме того имеется ряд квалификаторов, которые можно использовать с типом int: short (короткое), long (длинное) и unsigned (без знака). Квалификаторы short и long указывают на различные размеры целых. Числа без знака подчиняются законам арифметики по модулю 2 в степени n, где n - число битов в int ; числа без знаков всегда неотрицательны. описания с квалификаторами имеют вид:

short int x; 
long int y; 
unsigned int z;

Cлово int в таких ситуациях может быть опущено, что обычно и делается.

Количество битов, отводимых под эти объекты зависит от имеющейся машины; в таблице ниже приведены некоторые характерные значения.

Таблица 2.1.
DEC PDP-11 HONEYWELL 6000 IBM 370 INTERDATA 8/32
ASCII ASCII EBCDIC ASCII
char 8-BITS 9-BITS 8-BITS 8-BITS
int 16 32 32 32
short 16 36 16 16
long 32 36 32 32
float 32 36 32 32
double 64 72 64 64

Цель состоит в том, чтобы short и long давали возможность в зависимости от практических нужд использовать различные длины целых; тип int отражает наиболее "естественный" размер конкретной машины. Как вы видите, каждый компилятор свободно интерпретирует short и long в соответствии со своими аппаратными средствами. Все, на что вы можете твердо полагаться, это то, что short не длиннее, чем long.

2.3. Константы

Константы типа int и float мы уже рассмотрели. Отметим еще только, что как обычная

123.456е-7,

так и "научная" запись

0.12е3

для float является законной.

Каждая константа с плавающей точкой считается имеющей тип double, так что обозначение " e " служит как для float, так и для double.

Длинные константы записываются в виде 123L. Обычная целая константа, которая слишком длинна для типа int, рассматривается как long.

Существует система обозначений для восьмеричных и шестнадцатеричных констант: лидирующий 0 (нуль) в константе типа int указывает на восьмеричную константу, а стоящие впереди 0x соответствуют шестнадцатеричной константе. Например, десятичное число 31 можно записать как 037 в восьмеричной форме и как 0x1f в шестнадцатеричной. Шестнадцатеричные и восьмеричные константы могут также заканчиваться буквой l, что делает их относящимися к типу long.

2.3.1. Символьная константа

Символьная константа - это один символ, заключенный в одинарные кавычки, как, например, 'х' . Значением символьной константы является численное значение этого символа во внутреннем машинном наборе символов. Например, в наборе символов ASCII символьный нуль, или '0', имеет значение 48, а в коде ebcdic - 240, и оба эти значения совершенно отличны от числа 0. Написание '0' вместо численного значения, такого как 48 или 240, делает программу не зависящей от конкретного численного представления этого символа в данной машине. Символьные константы точно так же участвуют в численных операциях, как и любые другие числа, хотя наиболее часто они используются в сравнении с другими символами. Правила преобразования будут изложены позднее.

Некоторые неграфические символы могут быть представлены как символьные константы с помощью условных последовательностей, как, например,

  • \n (новая строка),
  • \t (табуляция),
  • \0 ( нулевой символ ),
  • \\ (обратная косая черта),
  • \' (одинарная кавычка) и т.д.

Хотя они выглядят как два символа, на самом деле являются одним. Кроме того, можно сгенерировать произвольную последовательность двоичных знаков размером в байт, если написать

'\ddd'

где ddd - от одной до трех восьмеричных цифр, как в

#define formfeed '\014' /* form feed */

Символьная константа '\0', изображающая символ со значением 0, часто записывается вместо целой константы 0, чтобы подчеркнуть символьную природу некоторого выражения.