long 的计算问题 <%long int_ip1=1;int_ip1=218*256*256*256;out.print("ip1="+int_ip1);%>这个是我在jsp中使用的,结果输出为:ip1=-637534208这是为什么?? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Java中的long是带符号的64位整数,正数最大能表示到:128*256*256*256 - 1,负数最小能表示到:-128*256*256*256。你的218*256*256*256溢出了。 建议使用java.math.BigInteger类。 int_ip1=218*256*256*256;//这是因为你的数字的默认类型为int,表达式的计算是以int类型来计算,这个结果已经超出了int的表示范围,然后将这个溢出后的结果赋值(变为负值)给long变量;可以改正如下,强制转换其中一个数字为long型,则整个表达式以long型来计算;int_ip1=(long)218*256*256*256; int所能表示的最大数值为:2147483647而你表达式的值为:3657433088;所以发生了溢出,变为负值;把他转换成long型计算,就正确的;long所能表示的最大数:9223372036854775807 但我对这个int_ip1的定义是long型的。不过我改成了这个,218L * 256 * 256 * 256确实可以了还是谢谢你们! 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型,所以从一开始做的就是长整型运算而非整型运算。 int_ip1的定义是long型//这个没有错,但是在java中你直接写的数字,java把他处理为int型;所以你那个表达式是以int类型计算的;导致溢出; steedhorse(晨星) 讲的都非常清楚了,呵呵,给分结贴! struts2 sendredirect 出现异常java.lang.IllegalStateException 不是本机数据库就慢? [跪求]spring--quartz JSP+ssh+mysql 请教一下JSP用指纹仪来登陆的解决方法。非常感谢 我把bean文件删了,为什么网页还能运行正确? 求教点击链接能自动登录到某个系统中去的问题 poi 控制excel 边框问题 用户的密码用何种算法加密存入数据库比较好? windows2000下怎么建jsp环境? 关于增加表格行数的问题,在线等,急,急,急!马上给分,谢谢了 ibatis中sql语句中的大于和小于的问题
//这是因为你的数字的默认类型为int,表达式的计算是以int类型来计算,这个结果已经超出了int的表示范围,然后将这个溢出后的结果赋值(变为负值)给long变量;
可以改正如下,强制转换其中一个数字为long型,则整个表达式以long型来计算;
int_ip1=(long)218*256*256*256;
而你表达式的值为:3657433088;所以发生了溢出,变为负值;把他转换成long型计算,就正确的;
long所能表示的最大数:9223372036854775807
不过我改成了这个,218L * 256 * 256 * 256
确实可以了还是谢谢你们!
int_ip1=218*256*256*256;
的含义是:先计算218*256*256*256的值,然后再把结果转换成long型赋给int_ip1。
而218*256*256*256每个运算数都是整数,其运算也就是整数运算,所以当结果出来的时候,已经是负数了。而218L*256*256*256,由于第一个数是long型而非int型,所以从一开始做的就是长整型运算而非整型运算。