这些意外行为有哪些规则?
int i1 = -+0007;
int i2 = +-0007;
System.out.println(i1); // output: -7
System.out.println(i2); // output: -7
int i3 = +-+0007; // -7
int i4 = -+-0007; // 7
我知道一元符号运算符是右关联运算符。但如果减去第一个(最右边),则下一个加号(向左)似乎不会将符号从减号更改为加号(即什么都不做!)。但第二个减去变化符号(从负到正)。
此外,我们不能在+ - + - + - 的这个序列中的任何地方使用++或 - (+ - +是编译错误:最右边+(或最左边+)是 - 操作的错误操作数。)
答案 0 :(得分:1)
一元-
更改了标志。一元+
没有,它几乎没有意义,只有unary numeric promotion,你可以看到here了解更多细节。
所以在你的第一行:
int i1 = -+0007;
+
不会对-
-7
次更改
第二行:
int i2 = +-0007;
-
对-7
+
的更改不执行任何操作
+--+
是编译错误,因为--
是一个只能对变量进行操作的不同运算符。以下内容将起作用:
int b = 1;
int a = -++b; // increment b by 1, change the sign and assign to a
System.out.println(a); // prints -2
您可以使用括号或添加空格来+--+
编译
int i = +-(-+7); // will be equal to 7 because only the 2 `-` change the sign
int i = +- -+7;
答案 1 :(得分:-1)
它已经与数学有关。如果乘以负数和正数,结果为负数。如果将两个负数相乘,则结果为正。
因此,-
或+
也可以写为:
-…: (-1) * …
+…: (1) * …