基本类型long的问题,实在搞不清楚!请帮忙

zhanlinghua 2003-08-26 08:17:30
在java中long是定义为64位
大家看下面例子:
public class print
{
public static void main(String args[])
{
long i=0x000000001;
long digest=0x900000000;
long y;
y=i^digest;
System.out.println("y="+y);
}
}
这里有个编译出错:
integer number too large: 900000000
long digest=0x900000000;

^
但是当把 digest的值改为digest=0x95e62708l
public class print
{
public static void main(String args[])
{
long i=0x000000001;
long digest=0x95e62708l;
long y;
y=i^digest;
System.out.println("y="+y);
}
}
可以通过编译,而且可以得出结果

为什么当 digest=0x900000000时它会报错,而当digest=0x5e62708l时却可以通过编译?

Long是64位,0x900000000肯定没超过64位,为什么会说数据太大
(integer number too large: 900000000)?

integer number too large: 900000000,这个integer又是怎么一回事
...全文
42 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
topbit 2003-08-26
  • 打赏
  • 举报
回复
long digest=0x900000000;
代码执行过程:
1、将右值转变成int型(越界);
2、将int型转化成long型;
3、将long型值付值给digest。
在第一步就出错。

用long digest=0x900000000L;
1、将右值转变成long型;
2、将long型值付值给digest。
flashspy 2003-08-26
  • 打赏
  • 举报
回复
在申明的地方,后面加L表示long型
long i=0x000000001L;
long digest=0x900000000L;
不然会是从int到long的默认造型
aixy 2003-08-26
  • 打赏
  • 举报
回复
楼上的说的对,在后面加"l"就可以了。
rubyz 2003-08-26
  • 打赏
  • 举报
回复
long digest=0x900000000L;就不会有问题。
0x900000000默认是int型

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧