Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Символьные (литерные) константы






Символьные константы – это один или два символа, заключенные в апострофы. Символьные константы, состоящие из одного символа, занимают в памяти один байт и имеют стандартный тип char. Примеры: 'z', '*', '\012', '\0', '\n' – односимвольные константы. Двухсимвольные константы занимают два байта и имеют тип int, при этом первый символ размещается в байте с меньшим адресом (о типах данных рассказывается в следующем разделе). 'ab', '\x07\x07', '\n\t' – двухсимвольные константы

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

Последовательности символов, начинающиеся с обратной косой черты, называются управляющими эскейп - последовательностями (escape-sequence).

Эскейп - последовательности используются:

· для записи символов, не имеющих графического изображения (например, \a — звуковой сигнал);

· для записи символов: символа апострофа ('), обратной косой черты (\), знака вопроса (?) и кавычки (");

· для записи любого символа с помощью его шестнадцатеричного или восьмеричного кода, например, \073, \0xF5. Числовое значение кода должно находиться в диапазоне от 0 до 255.

В табл. 1.4 приведены допустимые значения эскейп-последовательностей. Управляющая последовательность интерпретируется как одиночный символ. В таблице 000 – строка от одной до трех восьмеричных цифр, hh – строка из одной или двух шестнадцатеричных цифр. Последовательность '\0' обозначает пустую литеру.

Таблица 1.4

Допустимые ESC–последовательности в языке С++

Изображе- ние Внутренний код Обозначаемый символ Действие или смысл
'\a' 0x07 bel (audible bell) звуковой сигнал
'\b' 0x08 bs (backspace) возврат на шаг(забой)
'\f ' 0x0C ff (form feed) перевод страницы
'\n' 0x0A lf (line feed) перевод строки (LF)
'\r' 0x0D cr (carriage return) возврат каретки(CR)
'\t 0x09 ht (horizontal tab) горизонтальная табуляция
'\v' 0x0B vt (vertical tab) вертикальная табуляция
'\\' 0x5C \ (backslash) обратная черта
'\'' 0x27 ' (single quote) апостроф
'\" ' 0x22 '' (double quote) кавычка
'\? ' 0x3F ? (question mart) вопр. знак
'\000'   octal number Восьмеричный код символа
'\0xhh' hh hex number Шестнадцатеричный код

Для использования внутренних кодов символов нужна таблица, в которой каждому символу компьютера соответствует числовое значение его кода в десятичном, восьмеричном и шестнадцатеричном представлении. На IBM-совместимом ПЭВМ применяется таблица кодов ASCII.

Работу с символьными константами иллюстрирует программа:

#include< iostream.h>

void main()

{char c; int i;

c = 'ab'; cout < < c < < '\t';

i = ' ab '; cout < < i < < '\t';

i = c; cout < < i < < '\t';

i = ' ba ';

c = i; cout < < c < < '\t'; }

В результате программы на экран будет выведено:

a 25185 97 b

здесь 25185 – двухбайтовое целое число, а 97 – код символа 'a '.

Если выводить на экран односимвольную константу, то будет выведено изображение символа, но если эту же константу поместить, например, в арифметическое выражение, то значением константы будет ее десятичный внутренний код.

Для 32-разрядного компилятора допустимы константы – несколько символов, заключенных в апострофы, которые называются мультисимвольными (multicharacter literal) и имеют тип int.

Строковые константы

Строка или строковая константа- это последовательность символов, заключенная в кавычки.

Внутреннее представление строки в памяти таково: все символы размещаются подряд, и каждый символ занимает 1 байт, в котором размещается внутренний код символа. А в конце строки компилятор помещает еще один символ, называемый байтовым нулем '\0'. Этот символ как любой другой занимает в памяти 1 байт, 8 двоичных разрядов, в которых находятся нули.

Среди символов строковой константы могут быть эскейп-последовательности, например:

''Монография \'' Турбо – Паскаль\''. ''

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

''Миру - '' ''мир! ''

эквивалентна одной строке: ''Миру – мир! ''

Длинную строковую константу можно размещать на нескольких строках в программе, используя еще и символ переноса строк - '\'

В строке может быть один символ, например, ''A'', которая в отличие от символьной константы 'A' занимает в памяти 2 байта. Строковая константа может быть пустой '''', при этом ее длина равна 1 байту Символьная константа не может быть пустой, запись '' - не допустима.

Кроме непосредственного использования строк в выражениях, строку можно поместить в символьный массив, например, при его инициализации и обращаться к ней по имени массива (раздел 2).

Знаки операций

Знаки операций – это один из элементов выражений. Выражения есть правило получения значения. Результат операции - это всегда значение.

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

В табл. 1.5 представлены операции, приоритеты (ранги) и ассоциативность операций.

Таблица 1.5

Операции языка С++ и их приоритеты

Ранг Операции Ассоциативность
  ::. -> () [ ]  
  ! ~ + - ++ -- & * (тип) sizeof new delete тип () typeid dynamic_cast static_cast reinterpret_cast const_cast  
  .* -> *  
  * / % (мультипликативные)  
  + – (аддитивные)  
  < < > > (сдвиги)  
  < < = > = > (сравнения)  
  ==! = (сравнения)  
  & (поразрядная конъюнкция)  
  ^ (поразрядное исключающее ИЛИ)  
  | (поразрядная дизъюнкция)  
  & & (логическая конъюнкция)  
  || (логическая дизъюнкция)  
  ?: (условная операция)  
  = *= /= %= += -= & = ^= |= < < = > > = операция присваивания  
  throw  
  , (операция запятая)  

Кроме стандартных режимов использования операций язык С++ допускает расширение (перегрузку) их действия, дает возможность распространения действия на объекты классов. Примером такой перегрузки являются операции поразрядных сдвигов > > и < <. Когда слева от них в выражениях находятся входные и выходные потоки, они трактуются как операции извлечения данных из потока > > и вывода данных в поток < <.

В табл. 1.6 дано краткое описание стандартных операций языка С++.

 

 

Таблица 1.6

Сводка стандартных операций С++

Унарные операции Форма
1. & - операция получения адреса некоторого объекта программы & lvalue (lvalue – имя объекта программы)
2. * - разыменование, доступ по адресу к значению объекта * a (а – указатель на объект)
3. – - унарный минус – выражение
4. + - унарный плюс + выражение
5.! – логическое отрицание (НЕ) false –если операнд истинныйиtrue –если операнд ложный ! выражение ! 1 ==0,! (-5)==0(ложь) ! 0 == 1 (истина)
6. ++ - инкремент, увеличение значения операнда на 1 - префиксная форма - до использования его значения; - постфиксная форма – после использования его значения;     ++ lvalue   lvalue ++  
7. -- - декремент, уменьшение значения операнда на 1 - префиксная форма; - постфиксная форма     -- lvalue lvalue--
8. sizeof – размер в байтах внутреннего представления объекта sizeof выражение sizeof (тип)
9. new – динамическое выделение памяти new имя_ипа new имя_ипа инициализатор
10. delete – освобождение динамически выделенной памяти delete указатель delete [] указатель
11. ()- явное преобразование типа (тип) выражение
12. () - функциональная форма преобразования типа тип (выражение) тип имеет простое имя
13. typeid – операция определения типа операнда typeid (выражение) typeid(имя_типа)
14. dynamic_cast -операция приведения типа с проверкой допустимости при выполнении программы dynamic_cast < целевой тип> (выражение)
15. static_cast –операция приведения типов с проверкой допустимости приведения во время компиляции. static_cast < целевой тип> (выражение)
16.reinterpret_cast – операция приведения типов без проверки допустимости приведения. reinterpret_cast < целевой тип> (выражение)
17. const_cast –операция приведения типов, которая аннулирует действие модификатора const const_cast < целевой тип> (выражение)
18.:: -операция доступа из тела функциик внешнему объекту :: имя_объекта
Бинарные операции Форма
Аддитивные:  
19. + - сложение арифметических операндов, или сложение указателя с целочисленным операндом   выражение + выражение
20. –- вычитание арифметических операндов или указателей выражение – выражение
Мультипликативные  
21. * -умножение арифметических операндов выражение * выражение
22. / -деление операндов арифметических типов. При целых операндах дробная часть результата отбрасывается выражение / выражение 20/6 равно 3, -20/6 равно -3, 20/(-6) равно -3
23. % -получение остатка от целочисленного деления выражение % выражение 13%4 равно 1, (-13)%4 равно -1 13%(-4) равно 1, (-13)%(-4) равно -1
Операции сдвига  
24. < < - сдвиг влево битового представления левого целочисленного операнда на количество разрядов равное значению правого операнда   lvalue < < выражение
25. > > - сдвиг вправо битового представления левого целочисленного операнда на количество разрядов равное значению правого операнда     lvalue > > выражение
Поразрядные операции  
26. & поразрядная конъюнкция (И) битовых представлений целочисленных операндов   выражение& выражение
27. | - поразрядная дизъюнкция (ИЛИ) битовых представлений целочисленных операндов   выражение | выражение
28. ^ - поразрядное исключающее ИЛИ битовых представлений целочисленных операндов   выражение ^ выражение
Операции отношений (сравнения) Результат: true (1), если сравнение истинноиfalse (0)–если ложно  
29. < - меньше выражение < выражение
30. < = - меньше или равно выражение < = выражение
31. > - больше выражение > выражение
32. > = - больше или равно выражение > = выражение
33. = = - равно выражение = = выражение
34.! = - не равно выражение! = выражение
Логические бинарные операции Результат: true (1) - истинна иfalse (0) –ложь  
35. & & - конъюнкция (логическое И) скалярных операндов и отношений выражение & & выражение
36. || - дизъюнкция (логическое ИЛИ) скалярных операндов и отношений выражение || выражение
Операции присваивания  
37. = простое присваивание левому операнду значения выражения - операнда из правой части lvalue = выражение
38 операция = - составное присваивание левому операнду результат операции между левым и правым операндом; операциb * / % + - < < > > & | ^ lvalue операция = выражение эквивалентно lvalue = lvalue операция (выражение)
Операции доступа к компонентам структурированного объекта  
39..(точка) – прямой доступ к компоненту имя_объекта.имя_компонента
40. –> косвенный доступ к компоненту структурированного объекта, адресуемого указателем указатель_на_объект–> имя_ компонента
Операции доступа к адресуемым компонентам класса  
41..*-прямое обращение к компоненту класса по имени объекта и указателю на компонент имя_объекта.* указатель_ на_компонент
42. –> * косвенное обращение к компоненту класса через указатель на объект и указатель на компонент указатель_на_объект –> * указатель_на_компонент
43.:: -бинарная операциярасширения области видимости имя_класса:: имя_компонента имя_пространства_имен:: имя
44. () – операция круглые скобки – операция вызова функции имя_функции (список_аргументов)
45. [ ] - операция квадратные скобки - индексация элементов массивов имя_массива [индекс]
46.?: - условная (тернарная) операция;   выражение_1? выражение_2: выражение_3 если выражение_1 истинно, то значением операции является значение выражения_2, если выражение_1 ложно, то значением операции является значение выражения_3
47., - операция запятая – это несколько выражений, разделенных запятыми, вычисляются последовательно слева направо; результатом операции является результат самого правого выражения     (список_выражений)

Операция и выражение присваивания

Операция присваивания обозначается символом '='. Простейший вид операции присвоения:

l = v

Здесь l - выражение, которое может принимать значение, v - произвольное выражение.

Операция присвоения выполняется справа налево, т.е. сначала вычисляется значение выражения v, а затем это значение присваивается левому операнду l.

Левый операнд в операции присваивания должен быть так называемым адресным выражением, которое иначе называют lvalue. Примером адресного, или именующего выражения, является имя переменной. Адресным выражением никогда не являются константы. Не является lvalue и простое выражение, например, выражение a+b. Адресное выражение это объект, представляющий некоторый именованный участок памяти, в который можно поместить новое значение.

В языке C++ операция присваивания образует выражение присваивания, т.е. a = b означает не только засылку в a значения b, но и то, что a = b является выражением, значением которого является левый операнд после присвоения. Отсюда следует, что возможна, например, такая запись:

a = b = c = d = e + 2;

Если тип правого операнда не совпадает с типом левого, то значение справа преобразуется к типу левого операнда (если это возможно). При этом может произойти потеря значения, например:

int i; char ch; i=3.14; ch=777;

Здесь i получает значение 3, а значение 777 слишком велико, чтобы быть представленным как char, поэтому значение ch будет зависеть от способа, которым конкретная реализация производит преобразование из большего в меньший целый тип.

Существует так называемая комбинированная операция присваивания вида: a оп =b, здесь оп - знак одной из бинарных операций:


Поделиться с друзьями:

mylektsii.su - Мои Лекции - 2015-2024 год. (0.012 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал