Данные константы размещаются в памяти в формате double, а во внешнем представлении могут иметь две формы:
1) с фиксированной десятичной точкой, формат записи: ± n. m, где n, m – целая и дробная части числа;
2) с плавающей десятичной точкой (экспоненциальная форма) представляется в виде мантиссы и порядка. Мантисса записывается слева от знака экспоненты (Е или е), а порядок – справа. Значение константы определяется как произведения мантиссы и числа 10, возведенного в указанную в порядке степень.
Общий формат таких констант: ± n. mE ± p, где n, m – целая и дробная части числа, р – порядок; ±0. xxxE ± p – нормализованный вид, например, 1,25×10–8 = 0.125 E –7.
Примеры констант с фиксированной и плавающей точками:
1.0 –3.125 100 е –10 0.12537 е +12.
Пробелы внутри чисел не допускаются, а для отделения целой части числа от дробной используется точка. Можно опустить нулевую дробную или целую части числа, но не обе сразу, например, 1.0 «1. или 0.5 «.5.
В любом случае при использовании вещественных констант наличие так называемой десятичной точки обязательно.
Символьные константы
Символьная константа – это символ, заключенный в одинарные кавычки: ' A ', ' х ' (тип char занимает в памяти один байт).
Также используются специальные последовательности символов – управляющие (escape) последовательности:
\ n | – новая строка; |
\ t | – горизонтальная табуляция; |
\ b | – шаг назад; |
\ r | – возврат каретки; |
\ v | – вертикальная табуляция; |
\ f | – перевод формата (переход на новую строку); |
\\ | – обратный слеш; |
\' | – апостроф; |
\" | – кавычки; |
\0 | – символ «пусто», не путать с символом ‘0’. |
Символьная константа '\0' – это нулевой байт, каждый бит которого равен нулю.
При присваивании символьным переменным значений констант значения констант заключаются в апострофы, например:
char ss = ‘У’;
Текстовые символы непосредственно вводятся с клавиатуры, а специальные и управляющие – представляются в исходном тексте парами символов, например: \\, \', \".
Примеры символьных констант: ' А ', '9', '$', '\ n '.
Строковые константы
Строковая константа представляет собой последовательность символов кода ASCII, заключенную в кавычки (”). Во внутреннем представлении к строковым константам добавляется пустой символ '\0', который не является цифрой 0, на печать не выводится (в таблице кодов ASCII имеет код = 0) и является признаком окончания строки.
Кавычки не являются частью строки, а служат только для ее ограничения. Строка в языке Си представляет собой массив, состоящий из символов. Внутреннее представление константы "1234 ABC ": '1' '2' '3' '4' ' A ' ' B ' ' C ' '\0'.
Примеры строковых констант:
"Система", "\ n \ t Аргумент \ n ", "Состояние \" WAIT \" ".
Строковые константы еще называют строковыми литералами.
В конец строковой константы компилятор автоматически помещает нуль-символ.
Длинную строковую константу можно разбить на несколько, используя символ переноса – обратный слеш (\). Например:
“ Вы поступили и \
учитесь на факультете информационных технологий \
Белорусского государственного университета \
информатики и радиоэлектроники ”
Компилятор Си воспримет такую запись как единое целое, игнорируя символы обратного слеша.
ГЛАВА 4. Обзор операций
Операции, выражения
Выражения используются для вычисления значений (определенного типа) и состоят из операндов, операций и скобок. Каждый операнд может быть, в свою очередь, выражением или одним из его частных случаев – константой или переменной. Операнды задают данные для вычислений.
Знак операции – это один или более символов, определяющих действие над операндами, т.е. операции задают действия, которые необходимо выполнить. Внутри знака операции пробелы не допускаются.
Операции делятся на унарные, бинарные и тернарные – по количеству участвующих в них операндов, и выполняются в соответствии с приоритетами. Для изменения порядка выполнения операций используются круглые скобки.
Большинство операций выполняются слева направо, например, a + b + c ® ® (a + b)+ c. Исключение составляют унарные операции, операции присваивания и условная операция (?:), которые выполняются справа налево.
В языке Си используются четыре унарные операции, имеющие самый высокий приоритет, их часто называют первичными:
– операция доступа к полям структур и объединений при помощи идентификаторов «.» – точка;
– операция доступа к полям структур и объединений при помощи указателей «–>» – стрелка;
– операция [ ] индексации, используемая при декларации массива и обращении к его элементам;
– операция () обращения к функции.
Первичные операции будут рассмотрены в соответствующих разделах.
Полный список операций с указанием их приоритетов приводится в прил. 2.
Арифметические операции
Обозначения арифметических операций:
+ (сложение); – (вычитание); / (деление, для int операндов – с отбрасыванием остатка); * (умножение); % (остаток от деления целочисленных операндов со знаком первого операнда – деление «по модулю»).
Операндами традиционных арифметических операций (+ – * /) могут быть константы, переменные, обращения к возвращающим значения функциям, элементы массивов, любые арифметические выражения, указатели (с ограничениями).
Порядок выполнения действий в арифметических выражениях следующий: выражения в круглых скобках; операции *, /, %; операции +, –.
Унарные операции «знак числа» (+, –) обладают самым высоким приоритетом и определены для операндов числовых типов (имеющих числовой результат), при этом «+» носит только информационный характер, «–» меняет знак операнда на противоположный (неадресная операция).
Операции *, /, % обладают высшим приоритетом над операциями +, –, поэтому при записи сложных выражений нужно использовать общепринятые математические правила: «x + y * z – a /(b + с), т.е. использовать круглые скобки.
Операция присваивания
Формат операции присваивания:
Операнд _1 = Операнд _2;
Операндом _1 (левый операнд) может быть только переменная. Левый операнд операции присваивания получил название L–значение, (L – value, Left – value) – адресное выражение. Так в Си называют любое выражение, адресующее некоторый участок оперативной памяти, в который можно записать некоторое значение. Переменная – это частный случай адресного выражения.
Операндом _2 (правый операнд) могут быть: константа, переменная или любое выражение, составленное в соответствии с синтаксисом языка Си. Правый операнд операции присваивания назвали R–значение, (R–value, Right–value).
Присваивание значения в языке Cи, в отличие от традиционной интерпретации, рассматривается как выражение, имеющее значение левого операнда после присваивания. Таким образом, присваивание может включать несколько операций присваивания, изменяя значения нескольких операндов, например:
int i, j, k;
float x, y, z;
...
i = j = k = 0; «k = 0, j = k, i = j;
x = i + (y = 3) – (z = 0); «z = 0, y = 3, x = i + y – z;
Примеры недопустимых выражений:
– присваивание константе: 2 = x + y;
– присваивание функции: getch () = i;
– присваивание результату операции: (i + 1) = 2 + y;