黑马程序员技术交流社区
标题:
关于定义长整型long超出范围的问题【已解决】
[打印本页]
作者:
吴小东
时间:
2012-6-9 12:10
标题:
关于定义长整型long超出范围的问题【已解决】
本帖最后由 吴小东 于 2012-6-10 00:19 编辑
第一个问题是 为什么我定义长整型b 会报错过大的整数
第二个问题是 如果定义的整型超过了长整型-2的63次方 到 2的63-1次方 该如何定义
public static void main(String[] args)
{
//long b = 512230173432;
//long b = new Long(512230173432);//此处会报错 Test.java:9: 过大的整数: 512230173432
long a = 1;//定义2的0次方
for (int i = 1; i<100;i++ )
{
a = a*2;
if (i>=60)
{
System.out.println("2的"+i+"次方为: "+a); //打印出以下值
//2的60次方为: 1152921504606846976
//2的61次方为: 2305843009213693952
//2的62次方为: 4611686018427387904
//2的63次方为: -9223372036854775808
}
if (a<=0)
{
break;
}
}
}
复制代码
论坛菜鸟,第一次发帖,请大虾们多多指教;P
作者:
黑马张扬
时间:
2012-6-9 12:18
可使用BigDecimal类 BigDecimal由任意精度的整数非标度值 和 32 位的整数标度 (scale) 组成
作者:
赵兵锋
时间:
2012-6-9 13:12
本帖最后由 赵兵锋 于 2012-6-9 13:13 编辑
public static void main(String[] args){
long b = 512230173432L;//右边的表达式没有L的时候,表达式结果是int型,装不下,所以会报错。加上L,右边的表达式为long型,就装下了。
long c = new Long(512230173432L);//同样,这里加上L,就行了。
System.out.println("Max Value: "+Long.MAX_VALUE);
long a = 1;//定义2的0次方
for (int i = 1; i<65;i++ )
{
if(i==63){
a = a*2-1;//Long的最大值为2^63-1;超过会溢出。
}else{
a = a*2L;
}
if (i>=60)
{
System.out.println("2的"+i+"次方为: "+a);
}
if (a<=0)
{
break;
}
}
}
输出:
Max Value: 9223372036854775807
2的60次方为: 1152921504606846976
2的61次方为: 2305843009213693952
2的62次方为: 4611686018427387904
2的63次方为: 9223372036854775807
2的64次方为: -2
复制代码
作者:
吴小东
时间:
2012-6-9 13:28
赵兵锋 发表于 2012-6-9 13:12
难得自动装箱 拆箱 不适合long类型的数据吗? 我在下面的循环里面定义的long a = 1 ;循环过程中不加 L 它为什么也能自动提升了数据类型。
作者:
赵兵锋
时间:
2012-6-9 13:50
这是因为不同类型数据在做运算时,char、byte、int都会被先转成int再参与运算,运算结果也是int,若有long类型数据参与了运算,那么都会被转成long类型来运算,最后表达式结果也会是long。你定义的a是long类型的,在下面的a=a*2;里,一个long类型与int类型在做运算,2会被转为long类型,然后运算,表达是结果也会是long。
同理,若有float参与运算,都会被当作float运算,表达式结果也是float;若有double参与运算,同理。
作者:
黑马-王言龙
时间:
2012-6-9 19:09
第一个问题是 为什么我定义长整型b 会报错过大的整数
l
ong b = new Long(512230173432); //512230173432这个是int型;应该512230173432
L
第二个问题是 如果定义的整型超过了长整型-2的63次方 到 2的63-1次方 该如何定义
BigDecimal对象,可以和基本数据类型转换。
作者:
吴小东
时间:
2012-6-10 00:13
懂了,多谢各位大侠指点
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2