|
Типы, операции и выражения
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 в таких ситуациях может быть опущено, что обычно и делается.
Количество битов, отводимых под эти объекты зависит от имеющейся машины; в таблице ниже приведены некоторые характерные значения.
Цель состоит в том, чтобы 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, чтобы подчеркнуть символьную природу некоторого выражения.