首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么一元算子有结合性?

为什么一元算子有结合性?
EN

Stack Overflow用户
提问于 2015-05-08 15:13:06
回答 2查看 1.2K关注 0票数 1

在像“10-3-2”这样的表达式中,很容易理解为什么-和+运算符是左关联的。与数学惯例相匹配,结果为5而不是9。据我所知,当某些操作符具有相同的优先级时,结合性意味着顺序。

但这与一元运营者有什么关系呢?我不明白为什么一元算子有结合性。

注意:这个问题是关于一般编程的,但是如果你必须以一种依赖于语言的方式回答的话,最好是C。

EN

回答 2

Stack Overflow用户

发布于 2015-05-20 12:18:57

代码语言:javascript
复制
**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

但当我们考虑一元时,例如:

代码语言:javascript
复制
a = +1
a= -1
a++
a-- etc

您在这里提到的关于10 - 3 - 2的内容将不会被纳入一年期操作。

代码语言:javascript
复制
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. 优先性和结合性
  2. 赋值、算术和一元运算符 (我不太了解C语言。但运营商是常见的。)
票数 1
EN

Stack Overflow用户

发布于 2022-09-11 02:59:36

真的,一元运算符没有结合性。至少不是作为个人操作者。正如您所说,一元运算符不可能与其自身的另一个实例竞争同一个操作数;这只能在二进制运算符中发生。

另一方面,结合性的语法定义并不仅仅适用于两个相同的操作符。它适用于同一类的两个运算符之间。例如,+-相互关联,因为它们具有相同的优先级。

后缀运算符(例如,数组订阅和函数应用程序)通常比任何其他运算符(包括前缀运算符)关联得更紧密。我们可以通过将后缀操作符放在更高的优先级级别来注释它,或者我们可以通过将前缀和后缀运算符放在相同的优先级级别来注释它,然后说优先级级别与右边关联。

这两种描述都可以解释为什么*f()意味着“取消调用f的结果”--*(f())--而不是“调用f指向的函数”-(*f)()

就我个人而言,我发现将后缀操作符置于不同的优先级级别比前缀操作符更直观,前缀运算符也在它们自己的优先级级别上。但是,yacc的原始优先级声明语法没有提供没有关联的优先级级别的声明。(%nonassoc是不同的;它防止链接,它实际上修改了语法。)因此,必须将一元运算符声明为%left%right。在这两种选择中,%right更有意义,因为后缀运算符(通常)比前缀运算符关联更紧密。所以这是通常的风格。但这还不是很清楚。

Bison允许您使用%precedence声明声明优先级级别,而不需要关联。这对一元运营者来说很方便。但是许多其他基于yacc的解析器生成器不提供此特性,因此您仍然会经常看到用%right声明的一元操作符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30127191

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档