2017-10-28 40 views
0

我试图负Integer.MIN转换为使用下面的代码long型正值:转换负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; 

任何想法,为什么长期LV = -1 * value_int不Integer.MIN_VALUE的情况下工作吗?

+0

@Oleg这是一个C#问题/答案。虽然在这种情况下,问题可能非常相似,但它不是很好的重复。 –

+1

@ErwinBolwidt你可能是对的。发现另一个https://stackoverflow.com/questions/24755629/int-to-long-assignment虽然也不完美契合。我应该停止浪费时间来标记重复内容并回答明显的内容,如果没有人关心内容的质量,我为什么要这样做? (只是咆哮,不是针对你) – Oleg

回答

6

1(在这种情况下,在一元运算符-前面)是一个int文字。由于value_int也是int,所以乘法是作为int完成的 - 它溢出了,然后才提升为一长。如果使用long文字代替,乘法工作将作为一个长期的,而且你会得到正确的结果:

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

这是一个很迂腐的观点,但根据JLS -1不是一个整数文字。它是一元运算符前面的整型数字1。 –

+1

好的@cppbeginner,谢谢!相应地编辑我的答案。 – Mureinik