2013-05-15 35 views

回答

13

那是因为(int) 2147483648l-2147483648。您正在将long转换为int,并且它出界了。

+0

真的我铸造适用于任何整数number? – dhblah

+0

'(int)'是一个“to int”铸造操作符。 –

+0

是的,当然,非常感谢。 – dhblah

0

铸造问题。由于缩小导致数据丢失。你正在转换长整型。

查看更多about conversion

0

JLS

其余操作,是经过二进制数值提升整数的操作数(§5.6.2)产生的结果值,使得(a/b)*b+(a%b)等于a

从基本收缩转换JLS 5.1.3
所以2147483648l定投转换成int,这将是-2147483648然后根据(a/b)*b+(a%b) = a

值应该是-8你做了什么。

0

使用“long”来代替“int”。 你可以使用它没有强制类型转换也

0

参照实例可能是有用的:

public class Example1 
{ 
    public static void main(String args[]) 
    { 
     int b = (int)2147483648l; 
     System.out.println("Value of b: "+ b); 
     System.out.println("Output1: "+b % 10); 

     long a = 2147483648l; 
     System.out.println("Value of a: "+ a); 
     System.out.println("Output2: "+ a % 10); 
    } 
} 

输出

Value of b: -2147483648 
Output1: -8 
Value of a: 2147483648 
Output2: 8 
0

你得到一个负数,因为你转换到long一个int。在你的情况下可能的解决方法是简单地利用这个事实,即任何十进制x mod 10都只是最小小数位(在那个位置)的数字。例如,156模10是6,因为156除以10是15+(6/10)。所以,你可以做这样的事情

这只要你想要的是number % 10

相关问题