0

В выражении типа «10 - 3 - 2» легко понять, почему - и + операторы остаются ассоциативными. Чтобы соответствовать математическому соглашению и в результате получилось 5 вместо 9. Как я понял, ассоциативность означает порядок, когда некоторые операторы имеют одинаковый уровень приоритета.Почему унарный оператор имеет ассоциативность

Но какая уместность имеет это унарные операторы? Я не понимаю, почему унарный оператор имеет ассоциативность.

Примечание: Вопрос только в общем программировании, но если вам нужно ответить в зависимости от языка, то C является предпочтительным.

+0

См. Http://stackoverflow.com/questions/12961351/does-it-make-sense-for-unary-opera tors-to-be-associative (не дубликат, потому что это для C++, и объяснение не кажется «настолько хорошим», но оно все еще кажется «достаточно хорошим») – xanatos

ответ

1
**Arithmetic Operators** (Left-to-Right) 
+ Additive operator (a + b) 
- Subtraction operator (a - b) 
* Multiplication operator (a * b) 
/ Division operator (a/b) 
% Remainder operator (a % b) 

**Unary operators** (Right-to-Left) 
+ Unary plus operator; indicates positive value (numbers are positive without this, however) 
- Unary minus operator; negates an expression 
++ Increment operator; increments a value by 1 
-- Decrement operator; decrements a value by 1 
! Logical complement operator; inverts the value of a boolean 

Но если мы рассмотрим унарный, например:

a = +1 
a= -1 
a++ 
a-- etc 

То, что вы упомянули здесь с 10 - 3 - 2 не будут приняты в одноместной операции.

So the operation will be Left-to-Right. Therefore: 
10 - 3 equals 7 then 
7 - 2 equals 5 

Not as given below (Arithmetic operators always Left-to-Right not Right-to-Left) 
3 - 2 = 1 then 
10 - 1 = 9 This is absolutely wrong. 

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

  1. Precedence and Associativity
  2. Assignment, Arithmetic, and Unary Operators (я не очень сенсорный с языком C Но операторы являются общими..)