概述

一元运算是只有一个操作数的运算。由于一元运算只有一个操作数,它们会在包含它们的其他运算之前进行求值。常见的一元运算符包括正号(+)和负号(-)。

讨论

一元正号(也称为加号)和一元负号(也称为减号)是独特的运算符。正号和负号在与常量值一起使用时,表示这些值是正数还是负数。我们来考虑以下表达式:

+5 + -2

在这个表达式中,我们有三个运算符,按顺序为:一元正号、加法和一元负号。该表达式的结果是正数 3。正如你所看到的,我们必须区分正号表示一元正号和表示加法的情况。一元负号和减法也有同样的问题。我们来考虑:

-2 - +5

这个表达式的结果是负数 7。再看:

7 - -2

没有一元负号的常量默认认为是正数。当你减去负数时,就相当于在加法中加上该数,因此这个表达式的结果是正数 9。

取反 - 一元负号

取反的概念是取一个值并改变其符号,也就是翻转它。如果它是正数,则变为负数;如果它是负数,则变为正数。数学上,这相当于以下 C++ 代码示例,假设 money 是一个值为 6 的整数变量:

-money

money * -1

上面的两个表达式得到相同的结果。在第一行中,变量 money 中的值被取出,然后取反变为负数 6。在第二行中,变量 money 中的值被取出,然后与负 1 相乘,得到负数 6。

一元正号 - 无用

为了满足对称性,一元正号被作为运算符添加到 C++ 编程语言中。然而,它是一个完全无用的运算符,很少被使用。然而,不要困惑,下面的表达式是完全有效的:

6 + +5

第二个 + 符号被解释为一元正号。第一个 + 符号被解释为加法。

money

+money

money * +1

对于以上三行,如果变量 money 的值是 6,那么表达式的值就是 6。即使 money 中的值是负数 77,表达式的值也会是负数 77。这个运算符没有任何作用,因为乘以 1 不会改变其值。

可能的混淆

不要将一元负号运算符与递减运算符混淆。递减运算符会改变变量中的值,因此是一个左值概念。而一元负号不会改变变量的值,而是将其用于右值上下文。它取出值并取反该值。变量中的原始值不会改变。

由于没有改变与标识符名称相关的值,因此标识符名称可以代表一个变量或命名常量。

练习

评估以下包含一元正号和一元负号的表达式:

+10 – -2
-18 + 24
4 – +3
+8 + – +5
+8 + / +5

关键术语

  • 减号:也叫一元负号。
  • 加号:也叫一元正号。
  • 一元负号:一个导致取反的运算符。
  • 一元正号:一个几乎从不使用的无用运算符。

参考文献

  • cnx.org: 《编程基础 - 使用 C++ 的模块化结构化方法》
Last modified: Friday, 10 January 2025, 3:49 PM