将负Integer.MIN转换为正long

abh*_*hig 0 java int

我试图使用下面的代码将负Integer.MIN转换为正长值:

long lv = -1 * value_int;
Run Code Online (Sandbox Code Playgroud)

除了value_int = Integer.MIN_VALUE的值之外,上面的代码工作正常.在Integer.MIN_VALUE的情况下,lv的值始终为Integer.MIN_VALUE;

下面的代码适用于所有情况,包括Integer.MIN_VALUE

long lv = value_int;
lv = -1 * value_int;
Run Code Online (Sandbox Code Playgroud)

知道为什么long lv = -1*value_int在Integer.MIN_VALUE情况下不起作用?

Mur*_*nik 6

1(-在这种情况下,以一元运算符开头)是一个int文字.由于value_int也是一个int,乘法是作为int- 溢出,然后才提升为长.如果您使用long文字,则乘法将作为long进行,您将获得正确的结果:

long lv = -1L * value_int;
// Here-----^
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常迂腐的观点,但根据JLS -1不是一个int文字.它是一元运算符前面的int literal 1. (2认同)