<%
long int_ip1=1;
int_ip1=218*256*256*256;
out.print("ip1="+int_ip1);
%>
这个是我在jsp中使用的,结果输出为:
ip1=-637534208这是为什么??

解决方案 »

  1.   

    Java中的long是带符号的64位整数,正数最大能表示到:128*256*256*256 - 1,负数最小能表示到:-128*256*256*256。你的218*256*256*256溢出了。
      

  2.   

    建议使用java.math.BigInteger类。
      

  3.   

    int_ip1=218*256*256*256;
    //这是因为你的数字的默认类型为int,表达式的计算是以int类型来计算,这个结果已经超出了int的表示范围,然后将这个溢出后的结果赋值(变为负值)给long变量;
    可以改正如下,强制转换其中一个数字为long型,则整个表达式以long型来计算;
    int_ip1=(long)218*256*256*256;
      

  4.   

    int所能表示的最大数值为:2147483647
    而你表达式的值为:3657433088;所以发生了溢出,变为负值;把他转换成long型计算,就正确的;
    long所能表示的最大数:9223372036854775807
      

  5.   

    但我对这个int_ip1的定义是long型的。
    不过我改成了这个,218L * 256 * 256 * 256
    确实可以了还是谢谢你们!
      

  6.   

    int_ip1自己定义成long型的没用,因为:
    int_ip1=218*256*256*256;
    的含义是:先计算218*256*256*256的值,然后再把结果转换成long型赋给int_ip1。
    而218*256*256*256每个运算数都是整数,其运算也就是整数运算,所以当结果出来的时候,已经是负数了。而218L*256*256*256,由于第一个数是long型而非int型,所以从一开始做的就是长整型运算而非整型运算。
      

  7.   

    int_ip1的定义是long型//这个没有错,但是在java中你直接写的数字,java把他处理为int型;所以你那个表达式是以int类型计算的;导致溢出;
      

  8.   

    steedhorse(晨星) 讲的都非常清楚了,呵呵,给分结贴!