将负Integer.MIN转换为正long

时间:2017-10-28 13:37:35

标签: java int

我正在尝试使用以下代码将负Integer.MIN转换为正长值:

long lv = -1 * value_int;

以上代码完美无缺,除非value_int = Integer.MIN_VALUE的值。在Integer.MIN_VALUE的情况下,lv的值始终为Integer.MIN_VALUE;

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

long lv = value_int;
lv = -1 * value_int;

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

1 个答案:

答案 0 :(得分:6)

1(前面是一元-运算符,在本例中)是int字面值。由于value_int也是int,因此乘法作为int完成 - 它会溢出,然后才会提升为long。如果您使用long字面值,则乘法将作为long进行,您将得到正确的结果:

long lv = -1L * value_int;
// Here-----^