Приоритет операторов c: Логические операторы И, ИЛИ, НЕ в C++ | Уроки С++

Содержание

Программируем на C#: Приоритет операторов

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

int value = 1 + 2 * 3; // 1 + (2 * 3) = 7

value = (1 + 2) * 3; // (1 + 2) * 3 = 9

В C# все бинарные операторы являются лево-ассоциативными; это означает, что операции выполняются слева направо. Исключением являются операторы присваивания и оператор проверки (?:), выполняемые справа налево.

В следующей таблице перечислены все операторы в порядке убывания приоритета.

Категория

Операторы

Первичные операторы

(x) x.y f(x) a[x] x++ x— new typeof sizeof checked unchecked

Унарные операторы

+ — ! ~ ++x —x (T)x

Операторы умножения и деления

* / %

Операторы сложения и вычитания

+ —

Операторы сдвига

<< >>

Операторы отношения

< > <= >= is

Операторы равенства

== !=

Поразрядный оператор AND

&

Поразрядный оператор XOR

^

Поразрядный оператор OR

|

Логический оператор AND

&&

Логический оператор OR

||

Оператор проверки

?:

Оператор присваивания

= *= /= %= += -= <<= >>= &= ^= |=

Предлагаю ознакомиться с аналогичными статьями:

C++ — Операторы

Оператор — это символ, который сообщает компилятору выполнить определенные математические или логические манипуляции. C ++ богат встроенными операторами и предоставляет следующие типы операторов:

  • Арифметические операторы
  • Реляционные операторы
  • Логические операторы
  • Побитовые операторы
  • Операторы присваивания
  • Другие операторы

Арифметические операторы

Существуют следующие арифметические операторы, поддерживаемые языком C ++:

Оператор Описание Пример
+ Добавляет два операнда A + B даст 30
Вычитает второй операнд с первого A — B даст -10
* Умножает оба операнда A * B даст 200
/ Делит числитель на де-числитель B / A даст 2
% Оператор модуля и остаток после целочисленного деления B% A даст 0
++ Оператор приращения увеличивает целочисленное значение на единицу A ++ даст 11
Уменьшает целочисленное значение на единицу A— даст 9

Реляционные операторы

Существуют следующие реляционные операторы, поддерживаемые языком C ++:

Оператор Описание Пример
== Проверяет, равны ли значения двух операндов или нет, если да, то условие становится истинным. (A == B) не соответствует действительности.
знак равно Проверяет, равны ли значения двух операндов или нет, если значения не равны, условие становится истинным. (A! = B) истинно.
> Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. (A> B) неверно.
< Проверяет, является ли значение левого операнда меньше значения правильного операнда, если да, тогда условие становится истинным. (A <B) истинно.
> = Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. (A> = B) неверно.
<= Проверяет, является ли значение левого операнда меньше или равно значению правильного операнда, если да, тогда условие становится истинным. (A <= B) истинно.

Логические операторы

Существуют следующие логические операторы, поддерживаемые языком C ++:

Оператор Описание Пример
&& Вызывается логическим оператором AND. Если оба операнда отличны от нуля, условие становится истинным. (A && B) является ложным.
|| Вызывается логическим оператором ИЛИ. Если любой из двух операндов отличен от нуля, тогда условие становится истинным. (A || B) истинно.
! Вызывается логическим оператором NOT. Используется для изменения логического состояния операнда. Если условие истинно, то логический оператор NOT сделает ложным. ! (A && B) истинно.

Побитовые операторы

Побитовый оператор работает с битами и выполняет побитовую операцию. q 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 1 0 0 1 1

Побитовые операторы, поддерживаемые языком C ++, перечислены в следующей таблице:

Оператор Описание Пример
& Двоичный оператор AND копирует бит в результат, если он существует в обоих операндах. (A & B) даст 12, что составляет 0000 1100
| Двоичный оператор OR копирует бит, если он существует в любом из операндов. (A | B) даст 61, который равен 0011 1101
^ Оператор двоичного XOR копирует бит, если он установлен в один операнд, но не тот и другой. B) даст 49, который равен 0011 0001
~ Binary Ones Оператор дополнения является унарным и имеет эффект «flipping» бит. (~ A) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за подписанного двоичного числа.
<< Двойной левый оператор сдвига.Значение левых операндов перемещается влево на количество бит, заданных правым операндом. A << 2 даст 240, что составляет 1111 0000
>> Двоичный оператор правого сдвига. Значение левых операндов перемещается вправо на количество бит, заданных правым операндом. A >> 2 даст 15, что составляет 0000 1111

Операторы присваивания

Существуют следующие операторы присваивания, поддерживаемые языком C ++:

Оператор Описание Пример
знак равно Простой оператор присваивания, присваивает значения из правых операндов в левый операнд. C = A + B присваивает значение A + B в C
+ = Оператор Add AND присваивания, Он добавляет правый операнд в левый операнд и присваивает результат левому операнду. C + = A эквивалентно C = C + A
знак равно Subtract AND assign operator, вычитает правый операнд из левого операнда и присваивает результат левому операнду. C — = A эквивалентно C = C — A
знак равно Оператор умножения и присваивания, Он умножает правый операнд на левый операнд и присваивает результат левому операнду. C * = A эквивалентно C = C * A
знак равно Оператор Divide AND assign. Он делит левый операнд на правый операнд и присваивает результат левому операнду. C / = A эквивалентно C = C / A
знак равно Модуль и оператор присваивания, он принимает модуль с использованием двух операндов и присваивает результат левому операнду. 2
| = Побитовое включение оператора OR и присваивания. C | = 2 совпадает с C = C |2

Другие операторы

В следующей таблице перечислены некоторые другие операторы, поддерживаемые C ++:

Оператор Описание
sizeof

Возвращает размер переменной. Например, sizeof (a), где ‘a’ является целым числом и будет возвращать 4.

Condition ? X : Y

Если Условие истинно, то оно возвращает значение X, иначе возвращает значение Y.

,

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

. (dot) and -> (arrow)

Используются для ссылки на отдельных членов классов, структур и союзов.

Cast

Преобразуют один тип данных в другой. Например, int (2.2000) вернет 2.

&

Возвращает адрес переменной. Например, & a; даст фактический адрес переменной.

*

Является указателем на переменную. Например * var; будет указывать на переменную var.

Приоритеты операторов в C ++

Приоритет оператора определяет группировку терминов в выражении. Это влияет на оценку выражения. Некоторые операторы имеют более высокий приоритет, чем другие; например, оператор умножения имеет более высокий приоритет, чем оператор сложения —

Например, x = 7 + 3 * 2; здесь x назначается 13, а не 20, потому что оператор * имеет более высокий приоритет, чем +, поэтому он сначала умножается на 3 * 2, а затем добавляется в 7.

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

Категория  Оператор  Ассоциативность 
постфикс  () [] ->. ++ — —   Слева направо 
Одинарный  + -! ~ ++ — — (тип) * & sizeof  Справа налево 
Multiplicative   * /%  Слева направо 
присадка   + —  Слева направо 
сдвиг   << >>  Слева направо 
реляционный   <<=>> =  Слева направо 
равенство   ==! =  Слева направо 
Побитовое AND  Слева направо 
Побитовое XOR  Слева направо 
Побитовое OR  Слева направо 
Логические AND  &&  Слева направо 
Логический OR  ||  Слева направо 
условный  ?:  Справа налево 
присваивание  = + = — = * = / =% = >> = << = & = ^ = | =  Справа налево 
запятая  Слева направо

 

Порядок операций — Order of operations

В математике и информатике порядок, в котором выполняются операции

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

Например, в математике и большинстве компьютерных языков умножение имеет более высокий приоритет, чем сложение, и так было с момента появления современных алгебраических обозначений . Таким образом, выражение 2 + 3 × 4 интерпретируется как имеющее значение 2 + (3 × 4) = 14 , а не (2 + 3) × 4 = 20 . С введением экспонентов в XVI и XVII веках им был дан приоритет как над сложением, так и над умножением, и их можно было размещать только как верхний индекс справа от их основания. Таким образом, 3 + 5 2 = 28 и 3 × 5 2 = 75 .

Эти соглашения существуют для устранения двусмысленности обозначений, позволяя при этом быть как можно более краткими. Там, где желательно переопределить соглашения о приоритете или даже просто подчеркнуть их, можно использовать круглые скобки (), чтобы указать альтернативный порядок операций (или просто усилить порядок операций по умолчанию). Например, (2 + 3) × 4 = 20 заставляет сложение предшествовать умножению, а (3 + 5) 2 = 64 заставляет сложение предшествовать возведению в степень . Если в математическом выражении требуется несколько пар круглых скобок (например, в случае вложенных круглых скобок), круглые скобки можно заменить скобками или фигурными скобками, чтобы избежать путаницы, как в [2 × (3 + 4)] — 5 = 9 .

Определение

Порядок операций, который используется в математике, науке, технике и во многих языках программирования , выражается здесь:

  1. возведение в степень и извлечение корня
  2. умножение и деление
  3. сложение и вычитание

Это означает, что если в математическом выражении между двумя операторами появляется подвыражение, первым должен применяться оператор, который находится выше в приведенном выше списке.

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

В некоторых случаях полезно заменить деление умножением на обратное (мультипликативное обратное) и вычитание сложением противоположного (аддитивное обратное). Например, в компьютерной алгебре это позволяет обрабатывать меньшее количество бинарных операций и упрощает использование коммутативности и ассоциативности при упрощении больших выражений (подробнее см. Компьютерная алгебра § Упрощение ). Таким образом, 3 ÷ 4 = 3 ×1/4; другими словами, частное 3 и 4 равно произведению 3 и1/4. Также 3–4 = 3 + (−4) ; другими словами, разница 3 и 4 равна сумме 3 и −4. Таким образом, 1 — 3 + 7 можно рассматривать как сумму 1 + (−3) + 7 , и три слагаемых можно складывать в любом порядке, во всех случаях получая 5 в качестве результата.

Корневой символ √ традиционно продолжается чертой (называемой винкулумом ) над подкоренным выражением (это позволяет избежать скобок вокруг подкоренного выражения). Другие функции используют скобки вокруг ввода, чтобы избежать двусмысленности. Скобки можно опустить, если входные данные являются единственной числовой переменной или константой (как в случае sin x = sin ( x ) и sin π = sin (π) . Другое сокращенное соглашение, которое иногда используется, когда ввод является мономиальным ; таким образом, sin 3 x = sin (3 x ), а не (sin (3))  x , но sin x + y = sin ( x ) + y , поскольку x + y не является мономом. Это, однако, неоднозначно и не все понимаются вне определенных контекстов.Некоторые калькуляторы и языки программирования требуют скобок вокруг вводимых функций, некоторые — нет.

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

Примеры

1+3+5знак равно4+5знак равно2+5знак равно7.{\ displaystyle {\ sqrt {1 + 3}} + 5 = {\ sqrt {4}} + 5 = 2 + 5 = 7.}

Горизонтальная дробная черта также служит символом группировки:

1+23+4+5знак равно37+5.{\ displaystyle {\ frac {1 + 2} {3 + 4}} + 5 = {\ frac {3} {7}} + 5.}

Для облегчения чтения вместе со скобками () часто используются другие символы группировки, такие как фигурные скобки { } или квадратные скобки [] . Например:

[(1+2)÷(3+4)]+5знак равно[3÷7]+5{\ Displaystyle [(1 + 2) \ div (3 + 4)] + 5 = [3 \ div 7] +5}

Мнемоника

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

  • В США широко распространена аббревиатура PEMDAS . Это расшифровывается как P arentheses, E xponents, M ultiplication / D ivision, A ddition / S ubtraction. PEMDAS часто расширяется до мнемоники « Прошу прощения, моя дорогая тетя Салли ».
  • Канада и Новая Зеландия использование BEDMAS , стоя на B ракеток, E xponents, D IVISION / M ultiplication, ddition / S ubtraction.
  • Наиболее распространены в Великобритании, Пакистана, Индии, Бангладеш и Австралии и некоторых других странах английского языка является
    BODMAS
    означает либо B ракеток, O rder, D IVISION / M ultiplication, ddition / S ubtraction или B ракеток, O F / D IVISION / М ultiplication, ddition / S ubtraction. Нигерия и некоторые другие страны Западной Африки также используют BODMAS. Точно так же в Великобритании, BIDMAS также используется, стоя для B ракеток, я ndices, D IVISION / М ultiplication, ddition / S ubtraction.

Эта мнемоника может вводить в заблуждение, когда написана таким образом. Например, неверная интерпретация любого из приведенных выше правил как «сначала сложение, затем вычитание» приведет к неправильной оценке выражения.

а-б+cзнак равно(а-б)+c≠а-(б+c){\ Displaystyle a-b + c = (ab) + c \ neq a- (b + c)}

При вычислении приведенного выше выражения сложение и вычитание следует выполнять последовательно слева направо, поскольку вычитание является левоассоциативным и считается неассоциативной операцией . Правильный ответ будет либо работать слева направо, либо рассматривать вычитание как добавление числа со знаком; выполнение вычитания в неправильном порядке приведет к неправильному ответу. Мнемоники не отражают группировку сложения / вычитания или умножения / деления, поэтому их использование может привести к недопониманию.

Подобная двусмысленность существует и в случае последовательного деления, например, выражение a ÷ b ÷ c × d можно читать разными способами, но они не всегда могут давать один и тот же ответ.

((а÷б)÷c)×d≠а÷(б÷(c×d)){\ displaystyle ((a \ div b) \ div c) \ times d \ neq a \ div (b \ div (c \ times d))}

Деление традиционно считается левоассоциативным . То есть, если в строке несколько делений, порядок вычислений идет слева направо:

а/б/cзнак равно(а/б)/cзнак равноа/(б×c){\ Displaystyle a / b / c = (a / b) / c = a / (b \ times c)}

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

а÷б÷c×dзнак равноа×1б×1c×dзнак равноаб×1c×dзнак равноабc×dзнак равноаdбc{\ displaystyle a \ div b \ div c \ times d = a \ times {\ frac {1} {b}} \ times {\ frac {1} {c}} \ times d = {\ frac {a} { b}} \ times {\ frac {1} {c}} \ times d = {\ frac {a} {bc}} \ times d = {\ frac {ad} {bc}}}

Особые случаи

Последовательное возведение в степень

Если возведение в степень обозначается составными символами с использованием надстрочного обозначения, обычное правило — работать сверху вниз:

а б в = а ( б в )

который обычно не равен ( a b ) c .2)возвратные -4.

Смешанное деление и умножение

Точно так же может быть двусмысленность в использовании символа косой черты / в таких выражениях, как 1/2 x . Если переписать это выражение как 1 ÷ 2 x, а затем интерпретировать символ деления как указывающий на умножение на обратную величину, это станет:

1 ÷ 2 × х = 1 ×1/2× х =1/2× х .

В этой интерпретации 1 ÷ 2 x равно (1 ÷ 2) x . Однако в некоторой академической литературе умножение, обозначаемое сопоставлением (также известное как подразумеваемое умножение ), интерпретируется как имеющее более высокий приоритет, чем деление, так что 1 ÷ 2

x равно 1 ÷ (2 x ) , а не (1 ÷ 2) x . Например, рукописные инструкции представления для Physical Review ШЕЙКОВ состояния , что умножение имеет более высокий приоритет , чем деление с косыми чертами, и это также конвенция наблюдается в известных учебниках физики , такие как курс теоретической физики по Ландау и Лифшицу и Фейнман Лекции по физике .

Калькуляторы

Разные калькуляторы выполняют разный порядок операций. Многие простые калькуляторы без стека реализуют цепочку ввода, работающую слева направо, без какого-либо приоритета для разных операторов, например при вводе

1 + 2 × 3 дает 9,

в то время как более сложные калькуляторы будут использовать более стандартный приоритет, например, ввод

1 + 2 × 3
дает 7.

Программа Microsoft Calculator использует первое в стандартном представлении, а второе — в научных и программистских представлениях.

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

Калькуляторы могут связывать экспоненты слева или справа в зависимости от модели или режима оценки.c

Выражение , как интерпретируется как 1 / (2 х ) с помощью TI-82 , а также многих современных Casio вычислителей, но , как (1/2) х по ТИ-83 и любой другой TI калькулятор выпущен с 1996 года, а также все калькуляторы Hewlett-Packard с алгебраической записью. В то время как первая интерпретация может ожидаться некоторыми пользователями из-за природы подразумеваемого умножения , последняя больше соответствует стандартному правилу, согласно которому умножение и деление имеют равный приоритет, где 1/2

x читается как единица, деленная на два, а ответ умноженный на x . 1/2x

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

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

Языки программирования

Некоторые языки программирования используют уровни приоритета, которые соответствуют порядку, обычно используемому в математике, хотя другие, такие как APL , Smalltalk , Occam и Mary , не имеют правил приоритета операторов (в APL оценка выполняется строго справа налево; в Smalltalk и т. строго слева направо).

Кроме того, поскольку многие операторы не ассоциативны, порядок внутри любого отдельного уровня обычно определяется группировкой слева направо, поэтому это 16/4/4интерпретируется как (16/4) / 4 = 1, а не 16 / (4/4) = 16 ; такие операторы, возможно, ошибочно называют «левоассоциативными». Существуют исключения; например, языки с операторами соответствующих конс операции по спискам обычно делают их группы справа налево ( «правый ассоциативный»), например , в Haskell , 1:2:3:4:[] == 1:(2:(3:(4:[]))) == [1,2,3,4].

Автор на языке Си сказал о приоритете в C (разделяемой языки программирования , которые одолжить эти правила из С, например, C ++ , Perl и PHP ) , что было бы предпочтительнее , чтобы переместить операторы побитового выше операторов сравнения . = << = >> =

Операторы присваивания (справа налево) 15 , Оператор запятой

Примеры: (Примечание: в приведенных ниже примерах «≡» используется для обозначения «эквивалентно», а не для интерпретации как фактический оператор присваивания, используемый как часть примера выражения.)

  • !A + !B(!A) + (!B)
  • ++A + !B(++A) + (!B)
  • A + B * CA + (B * C)
  • A || B && CA || (B && C)
  • A && B == CA && (B == C)
  • A & B == CA & (B == C)

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

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

Смотрите также

Примечания

Ссылки

дальнейшее чтение

внешние ссылки

Операторы в C / C ++

Операторы являются основой любого языка программирования. Таким образом, функциональность языка программирования C / C ++ является неполной без использования операторов. Мы можем определить операторы как символы, которые помогают нам выполнять определенные математические и логические вычисления над операндами. Другими словами, мы можем сказать, что оператор операндов оперирует.
Например, рассмотрим следующее утверждение:

c = a + b;

Здесь «+» — это оператор, известный как оператор сложения, а «a» и «b» — операнды. Оператор сложения говорит компилятору добавить оба операнда ‘a’ и ‘b’.

C / C ++ имеет много встроенных типов операторов, и они классифицируются следующим образом:

  1. Арифметические операторы : это операторы, используемые для выполнения арифметических / математических операций над операндами. Примеры: (+, -, *, /,%, ++, -). Арифметический оператор бывает двух типов:
    1. Унарные операторы : операторы, которые работают или работают с одним операндом, являются унарными операторами. Например: (++, -)
    2. Бинарные операторы : операторы, которые работают или работают с двумя операндами, являются бинарными операторами. Например: (+, -, *, /)

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

  2. Реляционные операторы : они используются для сравнения значений двух операндов. Например, проверяя, равен ли один операнд другому операнду или нет, операнд больше другого операнда или нет и т. Д. Некоторые из реляционных операторов (==,> =, <=). Чтобы узнать подробнее о каждом из этих операторов, перейдите по этой ссылке.
  3. Логические операторы . Логические операторы используются для объединения двух или более условий / ограничений или для дополнения оценки исходного рассматриваемого условия. Результатом операции логического оператора является логическое значение true или false. Например, логический оператор И, представленный как оператор & & в C или C ++, возвращает true, когда оба рассматриваемых условия выполнены. В противном случае возвращается false. Следовательно, a && b возвращает true, когда и a, и b верны (т. Е. Отличны от нуля). Чтобы узнать подробнее о различных логических операторах, перейдите по этой ссылке.
  4. Битовые операторы : Битовые операторы используются для выполнения операций на уровне битов над операндами. Операторы сначала преобразуются в битовый уровень, а затем выполняется вычисление операндов. Математические операции, такие как сложение, вычитание, умножение и т. Д., Могут выполняться на уровне битов для более быстрой обработки. Например, побитовое AND, представленное как оператор & в C или C ++, принимает два числа в качестве операндов и делает AND для каждого бита из двух чисел. Результат И равен 1, только если оба бита равны 1. Чтобы узнать побитовые операторы подробно, перейдите по этой ссылке.
  5. Операторы присваивания : операторы присваивания используются для присвоения значения переменной. Левый операнд оператора присваивания является переменной, а правый операнд оператора присваивания является значением. Значение в правой части должно иметь переменную того же типа данных, что и в левой части, иначе компилятор выдаст ошибку.
    Различные типы операторов присваивания показаны ниже:
    1. «=» : Это самый простой оператор присваивания. Этот оператор используется для присвоения значения справа переменной слева.
      Например:
      a = 10;
      b = 20;
      ch = 'y';
      
    2. «+ =» : Этот оператор является комбинацией операторов «+» и «=». Этот оператор сначала добавляет текущее значение переменной слева к значению справа, а затем присваивает результат переменной слева.
      Пример:
      (a += b) can be written as (a = a + b)
      

      Если изначально значение, хранимое в a, равно 5. Тогда (a + = 6) = 11.

    3. «- =» : этот оператор является комбинацией операторов «-» и «=». Этот оператор сначала вычитает значение справа из текущего значения переменной слева, а затем присваивает результат переменной слева.
      Пример:
      (a -= b) can be written as (a = a - b)
      

      Если изначально значение, хранимое в a, равно 8. Тогда (a — = 6) = 2.

    4. «* =» : Этот оператор является комбинацией операторов «*» и «=». Этот оператор сначала умножает текущее значение переменной слева на значение справа, а затем присваивает результат переменной слева.
      Пример:
      (a *= b) can be written as (a = a * b)
      

      Если изначально значение, хранящееся в a, равно 5. Тогда (a * = 6) = 30.

    5. «/ =» : Этот оператор является комбинацией операторов «/» и «=». Этот оператор сначала делит текущее значение переменной слева на значение справа, а затем присваивает результат переменной слева.
      Пример:
      (a /= b) can be written as (a = a / b)
      

      Если изначально значение, хранящееся в a, равно 6. Тогда (a / = 2) = 3.

  6. Другие операторы . Помимо вышеперечисленных операторов, есть несколько других операторов, доступных на C или C ++, которые используются для выполнения некоторых конкретных задач. Некоторые из них обсуждаются здесь:
    1. Оператор sizeof : sizeof широко используется в языке программирования C / C ++. Это унарный оператор времени компиляции, который может использоваться для вычисления размера его операнда. Результат sizeof имеет целочисленный тип без знака, который обычно обозначается size_t. В основном, оператор sizeof используется для вычисления размера переменной. Чтобы узнать подробнее о размерах оператора вы можете перейти по этой ссылке.
    2. Оператор запятой: оператор запятой (представленный токеном) является бинарным оператором, который оценивает свой первый операнд и отбрасывает результат, затем он оценивает второй операнд и возвращает это значение (и тип). Оператор с запятой имеет самый низкий приоритет по сравнению с любым оператором C. Запятая действует как оператор и разделитель. Чтобы узнать о запятой в деталях, перейдите по этой ссылке.
    3. Условный оператор : Условный оператор имеет вид Expression1? Выражение 2: Выражение 3 . Здесь Expression1 — условие для оценки. Если условие (Expression1) равно True, то мы будем выполнять и возвращать результат Expression2, в противном случае, если условие (Expression1) будет ложным, мы будем выполнять и возвращать результат Expression3. Мы можем заменить использование операторов if..else условными операторами. Чтобы узнать подробности об условных операторах, перейдите по этой ссылке.

Таблица приоритетов операторов

В приведенной ниже таблице описан порядок приоритета и ассоциативность операторов в C / C ++. Приоритет оператора уменьшается сверху вниз.

OperatorDescriptionAssociativity
()Parentheses (function call)left-to-right
[]Brackets (array subscript)
.Member selection via object name
->Member selection via pointer
++/–Postfix increment/decrement
++/–Prefix increment/decrementright-to-left
+/-Unary plus/minus
!~Logical negation/bitwise complement
(type)Cast (convert value to temporary value of type)
*Dereference
&Address (of operand)
sizeofDetermine size in bytes on this implementation
*,/,%Multiplication/division/modulusleft-to-right
+/-Addition/subtractionleft-to-right
<< , >>Bitwise shift left, Bitwise shift rightleft-to-right
< , <=Relational less than/less than or equal toleft-to-right
> , >=Relational greater than/greater than or equal toleft-to-right
== , !=Relational is equal to/is not equal toleft-to-right
&Bitwise ANDleft-to-right
^Bitwise exclusive ORleft-to-right
|Bitwise inclusive ORleft-to-right
&&Logical ANDleft-to-right
||Logical ORleft-to-right
?:Ternary conditionalright-to-left
=Assignmentright-to-left
+= , -=Addition/subtraction assignment
*= , /=Multiplication/division assignment
%= , &=Modulus/bitwise AND assignment
^= , |=Bitwise exclusive/inclusive OR assignment
<>=Bitwise shift left/right assignment
,expression separatorleft-to-right

Статьи по теме :

Рекомендуемые посты:

Операторы в C / C ++

0.00 (0%) 0 votes

выражения (Expressions) и операторы (Operators)

Выражение по сути является значением (выражает значение). Самый простой пример выражения — константа (например, 123) или переменная (например, x).Выражения можно объединять и изменять с помощью операторов. Операторы принимают один или более входящих операндов и возвращают новое выражение.

12 * 30 // * — оператор; 12 и 30 — операнды

12 * 30 // * — оператор; 12 и 30 — операнды

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

Операторы можно разделить на унарные, бинарные и тернарными в зависимости от количества операндов, которые принимает оператор (один, два или три). Бинарный оператор всегда располагается между двумя операндами (инфиксная запись).

Операторы встроенные в базовую часть языка называются основными (primary), например оператор вызова метода — ().

Выражения, которые не возвращают никакого значения, называются пустыми выражениями (void expression), например, Console.WriteLine (1). Пустые выражения не могут быть использованы в качестве операнда в других (комплексных) выражениях.

Выражения присваивания (Assignment Expressions)

В выражениях присваивания используется оператор = позволяющий присвоить переменной значение другого выражения.

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

y = 5 * (x = 2) // y равен 10

y = 5 * (x = 2) // y равен 10

Эта особенность может быть использована для инициализации нескольких переменных сразу:

Составные операторы присваивания (compound assignment operators) — сокращение, объединяющее присваивание с каким-либо другим оператором:

x *= 2 // аналог x = x * 2 x <<= 1 // аналог x = x << 1

x *= 2 // аналог x = x * 2

x <<= 1 // аналог x = x << 1

Приоритет и ассоциативность операторов

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

Бинарные операторы (за исключением оператора присваивания =, лямбды => и оператора объединения со значением  Null ??) — лево-ассоциативные, т.е. выполняются слева направо (например, 8/4/2 выполняется как (8/4)/2). Порядок исполнения можно изменить с помощью скобок.

Оператор присваивания, лямбда, оператор объединения со значение Null и тернарный условный оператор — право-ассоциативные, т.е. исполняются справа налево.

Сводная таблица операторов C#

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

ОператорНазваниепримерперегружаемость 
Основные (Primary)    
.Доступ к членамx.yнет
-> Указатель на структуруx->yнет 
() Вызов функцииx()нет 
[] Массив/индексa[x]через индексатор
++ Пост-инкрементx++да
— Пост-декрементx— да 
new Новый экземплярnew Foo()нет
stackallocНебезопасное выделение стекаstackalloc(10) нет
typeofПолучить тип из идентификатораtypeof(int)нет
checkedВключить проверку переполнения целочисленных типовchecked(x)нет
unchecked Выключить проверку переполнения целочисленных типов unchecked(x)нет
defaultЗначение по умолчаниюdefault(char)нет 
awaitОжиданиеawait mytaskнет 
Унарные (Unary)    
sizeofПолучить размер структуры (struct)sizeof(int) нет
+Положительное значение+x да 
— Отрицательное значение-x да 
Отрицание (не)!xда 
~Поразрядное дополнение~xда
++ Пре-инкремент++xда 
— Пре-декремент —x да 
() Приведение к типу(int)xнет 
Значение по адресу*xнет 
Адрес значения &x нет 
Мультипликативные (Multiplicative)    
*Умножениеx * yда
Делениеx / y да 
Остаток от деления x % y да 
Аддитивные (Additive)    
Сложениеx + yда
— Вычитание x — y да 
Операторы сдвига (Shift)
<<Сдвиг влевоx << 1да
>>Сдвиг вправо x >> 1да 
ОПЕРАТОРЫ ОТНОШЕНИЙ (Relational)
Меньше чемx < yда
Больше чем x > y да 
<= Меньше или равноx <= yда 
>= Больше или равно x >= yда 
is Принадлежность экземпляра к типу x is yнет 
as Преобразование типаx as yнет 
Операторы равенства (Equality)
==Равноx == yда
!=Не равно x != yда 
Логическое И (Logical And)
Иx & yда
Логическое исключающее ИЛИ (Logical Xor)
^Исключающее ИЛИ x ^ yда 
Логическое ИЛИ (Logical Or)
|ИЛИ x | y да
Условное И (Conditional And)   
&&Условное И x && yчерез &
Условное ИЛИ (Conditional Or)    
||Условное ИЛИ x || y через | 
Тернарный Условный оператор (Conditional (Ternary))    
? :Условие isTrue ? then
This : elseThis
нет
Присваивание и лямбда (Assignment and lambda)    
=Присвоитьx = yнет
*= Умножить себя наx *= 2 через * 
/= Разделить себя наx /= 2 через / 
+= Прибавить к себеx += 2 через + 
-= Вычесть из себяx -= 2 через — 
<<= Сдвинуть себя влево на x <<= 2 через << 
>>= Сдвинуть себя вправо на x >>= 2 через >> 
&=Назначение Иx &= 2 через &
^=Назначение исключающего ИЛИx ^= 2через ^
|=Назначение ИЛИx |= 2через |
=>Лямбдаx => x + 1нет

Приоритет оператора — Портал программирования

Приоритет оператора определяет, насколько «тесно» он связывает между собой два выражения. Например, выражение 1 + 5 * 3вычисляется как 16, а не 18, поскольку оператор умножения («*») имеет более высокий приоритет, чем оператор сложения («+»). Круглые скобки могут использоваться для принудительного указания порядка выполнения операторов. Например, выражение (1 + 5) * 3 вычисляется как 18.

Если операторы имеют равный приоритет, то будут ли они выполняться справа налево или слева направо определяется их ассоциативностью. К примеру, «-» является лево-ассоциативным оператором. Следовательно 1 — 2 — 3 сгруппируется как (1 — 2) — 3 и пересчитается в -4. С другой стороны «=» — право-ассоциативный оператор, так что $a = $b = $c сгруппируется как $a = ($b = $c).

Неассоциативные операторы с одинаковым приоритетом не могут использоваться совместно. К примеру 1 < 2 > 1 не будет работать в PHP. Выражение 1 <= 1 == 1, с другой стороны, будет, поскольку == имеет более низкий приоритет чем <=.

Использование скобок, кроме случаев когда они строго необходимы, может улучшить читаемость кода, группируя явно, а не полагаясь на приоритеты и ассоциативность.

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

Порядок выполнения операторов
Ассоциативность Оператор Дополнительная информация
неассоциативна clone new clone и new
левая [ array()
правая ** арифметические операторы
правая ++  ~ (int) (float) (string) (array) (object) (bool) @ типы и инкремент/декремент
неассоциативна instanceof типы
правая ! логические операторы
левая * / % арифметические операторы
левая +  .= <<= >>= операторы присваивания
левая and логические операторы
левая xor логические операторы
левая or логические операторы

Пример #1 Ассоциативность

<![CDATA[
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
// ассоциативность тернарного оператора отличается от  C/C++
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2

$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>

 

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

Пример #2 Неопределенный порядок вычисления

<?php
$a = 1;
echo $a + $a++; // может вывести как 2 так и 3

$i = 1;
$array[$i] = $i++; // может установить индекс как 1 так 2
?>

 

Пример #3 + и . имеют одинаковый приоритет

<?php
$x = 4;
// следующий код может выдать неожиданный результат:
echo "x минус 1 равно " . $x-1 . ", ну я надеюсь\n";
// поскольку он вычисляется таким образом::
echo (("x минус один равно " . $x) - 1) . ", ну я надеюсь\n";
// требуемый приоритет следует задать скобками:
echo "x минус 1 равно " . ($x-1) . ", ну я надеюсь\n";
?>

 

Результат выполнения данного примера:

-1, or so I hope
-1, or so I hope
x минус один равно 3, ну я надеюсь

Замечание:

Несмотря на то, что = имеет более низкий приоритет чем большинство других операторов, PHP все же позволяет делать так: if (!$a = foo()), в этом примере результат выполнения foo() будет присвоен $a.

Приоритет

(7) — страница руководства Linux

приоритет (7) — страница руководства Linux
ОПЕРАТОР (7) Руководство программиста Linux ОПЕРАТОР (7)
 

НАЗВАНИЕ верхнее

       operator - приоритет оператора C и порядок вычисления
 

ОПИСАНИЕ вверху

       На этой странице руководства перечислены операторы C и их приоритет в
       оценка.

         Примечания об ассоциативности оператора 
       () [] ->.= | = справа налево
       ,                                   слева направо

       Следующие примечания содержат дополнительную информацию к приведенной выше таблице:

       [1] Операторы ++ и - на этом уровне приоритета являются постфиксом.
           ароматы операторов.
       [2] Операторы ++ и - на этом уровне приоритета являются префиксом
           ароматы операторов.
 

COLOPHON верх

       Эта страница является частью версии 5.09 проекта Linux  man-pages .А
       описание проекта, информация о сообщениях об ошибках и
       последнюю версию этой страницы можно найти по адресу
       https://www.kernel.org/doc/man-pages/.


 

Авторские права и лицензия на это руководство, стр.

Операторы

(Руководства по Java ™> Изучение языка Java> Основы языка)

Учебники по Java были написаны для JDK 8. Примеры и методы, описанные на этой странице, не используют улучшений, представленных в более поздних выпусках, и могут использовать технологии, которые больше не доступны.
Обзор обновленных языковых функций в Java SE 9 и последующих выпусках см. В разделе «Изменения языка Java».
См. Примечания к выпуску JDK для получения информации о новых функциях, улучшениях, а также удаленных или устаревших параметрах для всех выпусков JDK.

Теперь, когда вы узнали, как объявлять и инициализировать переменные, вы, вероятно, захотите узнать, как сделать что-нибудь с ними . Хорошее начало — изучение операторов языка программирования Java.Операторы — это специальные символы, которые выполняют определенные операции с одним, двумя или тремя операндами и , а затем возвращают результат.

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

Приоритет оператора
Операторы Приоритет
постфикс выражение ++ выражение -
одинарный ++ expr - expr + expr - expr ~!
мультипликативный * /%
добавка + -
смена << >> >>>
реляционный <> <=> = instanceof
равенство ==! =
побитовое И и
побитовое исключающее ИЛИ ^
побитовое включительно ИЛИ |
логическое И &&
логическое ИЛИ ||
тройной ? :
назначение = + = - = * = / =% = & = ^ = | = << = >> = >>> =

В программировании общего назначения одни операторы появляются чаще, чем другие; например, оператор присваивания « = » встречается гораздо чаще, чем беззнаковый оператор сдвига вправо « >>> ».Имея это в виду, нижеследующее обсуждение в первую очередь фокусируется на операторах, которые вы, скорее всего, будете использовать на регулярной основе, и заканчивается акцентом на менее распространенных. Каждое обсуждение сопровождается образцом кода, который вы можете скомпилировать и запустить. Изучение его результатов поможет закрепить то, что вы только что узнали.

Таблица приоритетов операторов языка C

Таблица приоритетов операторов языка C

Приоритет оператора описывает порядок, в котором C читает выражения.Например, выражение a = 4 + b * 2 содержит две операции, сложение и умножение. Компилятор C сначала вычисляет 4 + b , а затем умножает результат на 2 или сначала оценивает b * 2 , а затем прибавляет к результату 4 ? Таблица приоритетов операторов содержит ответы. Операторы, расположенные выше в таблице, имеют более высокий приоритет, что означает, что компилятор C оценивает их в первую очередь. Операторы в одной строке диаграммы имеют одинаковый приоритет, а в столбце «Ассоциативность» справа указан порядок их оценки.

Таблица приоритетов операторов
Оператор Тип Оператор Ассоциативность
Операторы первичных выражений () []. -> выражение ++ выражение - слева направо
Унарные операторы * & + -! ~ ++ expr - expr ( приведение типа ) sizeof справа налево
Бинарные операторы * /% слева направо
+ -
>> <<
<> <=> =
==! =
и
^
|
&&
||
Тернарный оператор ?: справа налево
Операторы присвоения = + = - = * = / =% = >> = << = & = ^ = | = справа налево
запятая , слева направо

Приоритет и ассоциативность операторов в JavaScript

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

5 + 8 + 2 * 2

Умножение

выполняется первым. Таким образом, результат будет 5 + 8 + 4 = 17, а не 30, если вы сначала сложили, а затем умножили на 2! Если вы хотите принудительно установить определенный порядок приоритета, вы можете использовать круглые скобки, потому что выражения, сгруппированные в круглые скобки, оцениваются первыми.Если мы хотим выполнить сложение перед умножением в предыдущем примере, мы можем записать наше выражение как:

(5 + 8 + 2) * 2

Ассоциативность в JavaScript

На оценку выражения также влияет ассоциативность оператора. Ассоциативность означает направление (справа налево или слева направо), в котором оценивается все выражение. Если в выражении появятся два или более операторов с одинаковым уровнем приоритета, что будет выполняться первым? На этот вопрос отвечает ассоциативность операторов.Обратитесь к таблице 1, чтобы решить любые проблемы с ассоциативностью или приоритетом в JavaScript.

Приоритетность и ассоциативность операторов таблицы 1 в JavaScript
Оператор Использование оператора Ассоциативность операторов Приоритет оператора
() Вызов метода / функции, группировка Слева направо Высшее - 1
[] Доступ к массиву Слева направо 1
. Доступ к свойствам объекта Слева направо 1
++ Приращение Справа налево 2
Декремент Справа налево 2
Отрицание Справа налево 2
! Логическое НЕ Справа налево 2
~ Побитовое НЕ Справа налево 2
удалить Удаляет значение массива или свойство объекта Справа налево 2
новые Создает объект Справа налево 2
тип Возвращает тип данных Справа налево 2
пусто Задает отсутствие возвращаемого значения Справа налево 2
/ Дивизион Слева направо 3
* Умножение Слева направо 3
% Модуль упругости Слева направо 3
+ плюс Слева направо 4
+ Конкатенация строк Слева направо 4
Вычитание Слева направо 4
>> Побитовый сдвиг вправо Слева направо 5
<< Побитовый сдвиг влево Слева направо 5
>,> = Больше, больше или равно Слева направо 6
<, <= Меньше, меньше или равно Слева направо 6
== Равенство Слева направо 7
! = Неравенство Слева направо 7
=== Оператор идентификации - равно (и имеет тот же тип данных) Слева направо 7
! == Неидентификационный оператор - не равен (или имеет другой тип данных) Слева направо 7
и Побитовое И Слева направо 8
^ Побитовое исключающее ИЛИ Слева направо 9
| Побитовое ИЛИ Слева направо 10
&& логический И Слева направо 11
|| Логическое ИЛИ Слева направо 12
?: Условное отделение Слева направо 13
= Назначение Справа налево 14
* =, / =,% =, + = ,, - =, << =, >> =, >>> =, & =, ^ =, | = Присвоение по предыдущему оператору Справа налево 14
, Множественная оценка Слева направо Самый низкий: 15

Рассмотрим следующий пример:

5 + 6-11 + 8 * 5 + 4 =?

В этом примере мы используем три экземпляра оператора сложения / плюс (+).Без предопределенного приоритета порядка операторов у всех нас, скорее всего, будут разные ответы. К счастью, мы можем использовать приоритет и ассоциативность информации операторов JavaScript, показанную в таблице 1, чтобы избежать противоречивых результатов. Согласно этой таблице, оператор умножения (*) имеет более высокий приоритет, чем операторы плюс и вычитание. Кроме того, в таблице указано, что оператор «плюс» и оператор вычитания имеют одинаковый уровень приоритета, а их ассоциативность указывает на то, что мы оцениваем их слева направо.

Итак, чтобы оценить это выражение, мы сначала умножим 8 * 5, что будет равно 40. После выполнения этой операции наше арифметическое выражение станет

5 + 6-11 + 40 + 4 =?

Мы вычисляем это выражение слева направо, начиная с добавления 5 + 6. Это дает 11. Затем мы вычитаем 11 из 11, и это дает 0. Итак, у нас осталось 0 + 40 + 4, что равно 44. Ниже показана последовательность операций, использованных для получения окончательного результата:

Приоритет оператора C - cppreference.com

В следующей таблице перечислены приоритеты и ассоциативность операторов C. Операторы перечислены сверху вниз в порядке убывания приоритета.

Приоритет Оператор Описание Ассоциативность
1 ++ - Увеличение и уменьшение суффикса / постфикса слева направо
() Вызов функции
[] Индекс массива
. Доступ к структуре и членам профсоюза
-> Доступ к структуре и члену объединения через указатель
( тип ) { список } Составной литерал (C99)
2 ++ - Увеличение и уменьшение префикса справа налево
+ - Унарный плюс и минус
! ~ Логическое НЕ и побитовое НЕ
( тип ) Тип литой
* Косвенное обращение (разыменование)
и Адрес-оф.
размер Размер
_Alignof Требование центровки (C11)
3 * / % Умножение, деление и остаток слева направо
4 + - Сложение и вычитание
5 << >> Побитовый сдвиг влево и вправо
6 < <= Для операторов отношения <и ≤ соответственно
> > = Для операторов отношения> и ≥ соответственно
7 == ! = Для реляционных = и ≠ соответственно
8 и Побитовое И
9 ^ Побитовое исключающее ИЛИ (исключающее ИЛИ)
10 | Побитовое ИЛИ (включая или)
11 && Логическое И
12 || Логическое ИЛИ
13 ?: Тернарный условный справа налево
14 = Простое задание
+ = - = Переуступка по сумме и разнице
* = / = % = Присвоение по продукту, частному и остатку
<< = >> = Присваивание с помощью побитового сдвига влево и вправо
& = ^ = | = Присваивание с помощью побитового AND, XOR и OR
15 , запятая слева направо

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *