将负Integer.MIN转换为正长
我想使用下面的代码将负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
(前面是一元-
运算符,在本例中)是一个int
文字。 由于value_int
也是一个int
,因此乘法以int
forms完成 – 它会溢出,然后才会提升为long。 如果你使用long
文字,乘法将作为一个长整数,你会得到正确的结果:
long lv = -1L * value_int; // Here-----^