为什么我可以在Java中将按位运算符与数学运算符(如&+)结合使用?

Joj*_*dmo 3 java operators

我今天早些时候在写一些代码,但是忘记了我在写Java而不是Swift并意外键入了&+。出乎意料的是,我没有遇到任何错误,并且代码已编译并运行良好。

我打了周围一点点,结果发现&+&-|+|-^+,和^-所有的编译和运行没有错误。看起来当它们对数字起作用时,它们都像第一个按位运算符一样起作用:

1 &+ 2 == 1 & 2
3 |+ 4 == 3 | 4
7 ^+ 9 == 7 ^ 9
Run Code Online (Sandbox Code Playgroud)

在另一方面,它似乎是一个位运算符的任何其他组合和数学运算符,如+&&/^*,都给予编译时错误。

为什么&+&-|+|-^+,和^-编译和运行没有错误?他们是否有我没有看到的某些目的,或者仅仅是一些编译上的怪异?

Nik*_*las 6

+代表的Unary Plus Operator +产生了正数。

-装置Unary Minus Operator -产生一个负数。

  • 1 &+ 21 & +2
  • 3 |- 43 | -4
  • 7 ^+ 97 ^ +9

请注意,*/运算符不能以相同的方式使用(1 &/ 2)。

  • 为了正确命名,“ +”号是[一元加号运算符](https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.15.3) ,而-是[一元减法运算符](https://docs.oracle.com/javase/specs/jls/se12/html/jls-15.html#jls-15.15.4)。 (5认同)
  • 出于兴趣的考虑,也仅需指出:没有负整数文字之类的东西。它是一元减运算符和非负整数文字。您可以看到此内容,因为尽管表面上与`Integer.MIN_VALUE`相等,但您无法编写`-2147483648`,因为它被解释为`-`,然后是`2147483648`,对于int常量而言太大了。 (3认同)