编程基础
概述
一元运算是只有一个操作数的运算。由于一元运算只有一个操作数,它们会在包含它们的其他运算之前进行求值。常见的一元运算符包括正号(+)和负号(-)。
讨论
一元正号(也称为加号)和一元负号(也称为减号)是独特的运算符。正号和负号在与常量值一起使用时,表示这些值是正数还是负数。我们来考虑以下表达式:
+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++ 的模块化结构化方法》