Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Выражение и его интерпретацияСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Выражения в языке С++ - это последовательность операндов, операций и символов-разделителей. Операнды - это переменные, константы либо другие выражения. Разделителями в С++ являются символы [ ] () { },;:... * = #, каждый из которых выполняет свою функцию. Выражение может состоять из одной или более операций и определять выполнение целого ряда элементарных шагов по преобразованию информации. Компилятор соблюдает строгий порядок интерпретации выражений, называемый правилами предшествования. Этот порядок может быть изменён, если отдельные части выражения заключить в круглые скобки. Элементарная операция по преобразованию информации задаётся знаком операции. По числу операндов участвующих в операции различают две группы операций: унарные (один операнд) и бинарные (два операнда). По типу выполняемой операции различают арифметические, поразрядные, логические, присваивания, операции отношения и др.
Основные операции и их приоритет
Арифметические операции
Язык С++ включает стандартный набор арифметических операций сложения (задаётся знаком +), вычитания (-), умножения(*), деления (/), не требующих особого пояснения. Специфичными для С++ являются операции определения остатка (%), инкремента (++) и декремента (--). Операцию % поясняет следующий пример: int a = 5, b = 2, c = 0, d; d = a%b; /* d=1 – остаток от целого деления 5/2 */ d = b%a; /* d=2 */ d = a%c; /* сообщение об ошибке деления на 0 */
Операции инкремента и декремента соответственно увеличивают и уменьшают операнд на 1. Операции ++ и – могут применяться только к переменным. Существуют две формы их записи: префиксная, когда операнд располагается справа от знака операции, и постфиксная, когда операнд располагается перед знаком операции. В префиксной форме сначала выполняется увеличение операнда на 1 и увеличенное значение используется в выражении. В постфиксной форме сначала берётся значение операнда и только после этого его значение увеличивается на 1. Например: int a = 0, b = 1, c; c = a++; /* c равно 0, а равно 1 */ c = ++a; /* теперь с=2, а=2 */ c = ++b; /* с=2, b=2 */
Форма записи операций ++ и -- сказывается в составных выражениях. Ясно, что нет никакого различия между одиночными выражениями a++; и ++a; b--; и –b;
Поразрядные логические операции
С++ поддерживает следующие поразрядные логические операции: & поразрядное логическое И (AND); ^ поразрядное сложение по модулю 2 (XOR – исключающее или); | поразрядное логическое ИЛИ (OR); ~ поразрядная инверсия. Каждый бит результата определяется по битам операндов так, как это показано в табл. 8.
Таблица 8
Инверсия требует использования единственного операнда справа от знака ~. Результат образуется поразрядной инверсией всех битов операнда. Примеры: int s = 0x53c9, mask = 0x356c, r_or, r_and, r_xor, r_inv; r_or = s|mask; /* r_or=0x77ed */ r_and = s&mask; /* r_and=0x1148 */ r_xor = s^mask; /* r_xor=0x66a5 */ r_inv = ~mask; /* r_inv=0xca93 */ Поразрядные логические операции широко применяют для быстрого выделения остатка от деления операндов типа unsigned int на значения, кратные двум, а также для определения значения одного или нескольких заданных битов числа. Например, определение остатка от деления операнда unsigned int на 2, 4, 8, 16 и т. д. требует поразрядной логической операции И делимого соответственно с масками 0х01, 0х03, 0х07, 0х0f, 0x1f и т. д. Другими словами, выделяются младшие биты числа, а остальные биты устанавливаются в 0. Это наиболее быстрый способ выделения остатка. Пример: int s = 0x05, mask = 0x01; r_or = s&mask = 0x05 & 0x01 = 0x01; Это наиболее быстрый способ выделения остатка.
Операции сдвига
Язык С++ включает две операции поразрядного сдвига: << - сдвиг влево операнда слева от знака операции на число двоичных разрядов справа от знака операции; >> - сдвиг вправо операнда слева от знака операции на число двоичных разрядов справа от знака операции. Выдвигаемые биты теряются, а «вдвигаются» нулевые биты. Сдвиг операндов влево на 1, 2, 3 и более разрядов – наиболее быстрый способ деления на 2, 4, 8,… Например: half_adr = adr >> 1; /* деление на 2 */ double_adr = adr << 1; /* умножение на 2*/ Часто операции сдвига выполняются при преобразовании чисел или при формировании целого из частей. Ограничением операции сдвига является то, что число двоичных разрядов для сдвига операнда слева может быть задано только константой или константным выражением, т. е. выражением, целиком состоящим из констант. Поэтому компилятор сгенерирует сообщение об ошибке в следующем случае: int var1, shift = 5; var1 = var1 >> shift;
|
|||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2017-02-05; просмотров: 491; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.17.137 (0.007 с.) |