В этой статье представлен исчерпывающий учебник, который поможет вам узнать об ассоциативности и приоритете операторов в языке C.
Приоритет оператора в C
Приоритет оператора описывает последовательность, в которой вычисляются несколько операторов при вычислении выражений. Например, если в выражении есть операторы сложения и умножения, какой из них следует вычислять первым? Ответ прост, C следует определенным правилам для разрешения такой неоднозначности, широко известным как приоритет оператора . В С, приоритет оператора классифицируется на 17 уровней, от унарных операторов до тернарных условных операторов. Большинство используемых операторов, таких как арифметические операторы, операторы отношения, логические операторы и побитовые операторы, соответствуют стандарту C. приоритет оператора протокол.
Приоритет правила определяют, какие операторы имеют более высокий приоритет, чем другие, при оценке выражений. Несколько типов операторов в языке программирования C имеют разную степень приоритет . Например, унарные операторы имеют более высокий приоритет, чем бинарные. Ниже приведен список операторов, отсортированных в порядке возрастания приоритет :
Оператор | Значение оператора | Ассоциативность |
() [] -> . |
Функциональный вызов Ссылка на элемент массива Косвенный выбор члена Прямой выбор участников |
Слева направо |
! ~ + – ++ — & * размер (тип) |
Логическое отрицание Побитовое (1) дополнение Унарный плюс Унарный минус Увеличение Уменьшение Разыменование (адрес) Ссылка на указатель Возвращает размер объекта Приведение типов (преобразование) |
Справа налево |
* / % |
Умножить Разделять Остаток |
Слева направо |
+ – |
Двоичный плюс (дополнение) Двоичный минус (вычитание) |
Слева направо |
<< >> |
Левый 'шифт Правый сдвиг |
Слева направо |
< <= > >= |
Меньше, чем Меньше или равно Больше чем Больше или равно |
Слева направо |
== '=' |
Равно Не равно |
Слева направо |
& | Побитовое И | Слева направо |
^ | Побитовое исключающее ИЛИ | Слева направо |
| | Побитовое ИЛИ | Слева направо |
&& | Логическое И | Слева направо |
|| | Логическое ИЛИ | Слева направо |
?: | Условный оператор | Справа налево |
'=' '=' '=' '=' += '=' '=' ^= |= <<= >>= |
Простое задание Назначить продукт Назначить частное Назначить остаток Назначить сумму Назначить разницу Присвоить побитовое И Назначить побитовое XOR Присвоить побитовое ИЛИ Назначить левую смену Назначить правую смену |
Справа налево |
, | Разделитель выражений | Слева направо |
Эти правила указывают компилятору, как оценивать выражения с несколькими операторами в одном выражении. Оператор умножения, например, имеет больший приоритет, чем оператор сложения в уравнении A + B * C, в соответствии с правилом приоритет правила. Поэтому компилятор сначала оценит выражение B * C перед добавлением A к результату.
Давайте посмотрим на пример приоритет оператора через код.
#includeинт основной ( ) {
инт а '=' 43 , б '=' одиннадцать , с '=' 16 , д '=' 31 ;
инт результат '=' ++ а * б -- + с / -- д ;
printf ( 'а = %d \n ' , а ) ;
printf ( 'б = %д \n ' , б ) ;
printf ( 'с = %d \n ' , с ) ;
printf ( 'д = %д \n ' , д ) ;
printf ( 'результат = %d \n ' , результат ) ;
возвращаться 0 ;
}
Четыре переменные a, b, c и d объявлены в приведенном выше коде, и их начальные значения равны 43, 11, 16 и 31 соответственно. Затем к этим переменным в выражении применяются различные арифметические операторы и операторы присваивания. Выражение увеличивает значение a с помощью оператора преинкремента ++a, умножает результат на оператор постдекремента b–, а затем прибавляет результат к делению c на предварительно уменьшенное значение d. (используя оператор предварительного декремента –d). Затем переменная result используется для хранения общего результата этого выражения.
Выход
Ассоциативность в C
Ассоциативность относится к порядку, в котором операторы оцениваются во время выражения с тем же приоритетом. Слева направо и справа налево ассоциативность две формы ассоциативности в C. Если два оператора имеют одинаковые приоритет , они оцениваются слева направо в соответствии с концепцией слева направо ассоциативность . Тем не менее, если соблюдается тот же приоритет, операторы оцениваются справа налево в соответствии с справа налево. ассоциативность .
Например, оператор приращения ++ имеет направление справа налево. ассоциативность , что означает приращение оператор оценивается после переменной. В то время как логическое И оператор имеет направление слева направо ассоциативность , что означает, что оператор оценивается слева направо.
#includeинтервал основной () {
инт а = 6 , б = 3 , с = 2 ;
int результат = а * б / с;
printf( 'результат = %d \n ' , результат);
возвращаться 0 ;
}
В этом коде объявлены три переменные a, b и c, и они инициализированы значениями 6, 3 и 2 соответственно. Затем к этим переменным в выражении применяются операции умножения и деления. Умножение и деление ранжируются слева направо в C на основе их ассоциативность так как они имеют одинаковый уровень приоритета. Это указывает на то, что сначала идет операция деления, а затем операция умножения при вычислении выражения, a * b / c.
Выход
Заключение
Приоритет оператора и ассоциативность являются ключевыми понятиями в программировании на C, которые помогают определить порядок выполнения выражений. Операторы с самым высоким приоритет уровень оценивается в первую очередь и ассоциативность Правила помогают определить порядок при использовании нескольких операторов с одинаковым приоритетом. Понимание приоритет оператора и ассоциативность имеет важное значение при разработке сложных программ и помогает создавать более чистый и эффективный код с меньшим количеством ошибок.