java中长整型定义intx=0x80000000;Syst-查字典问答网
分类选择

来自黄振利的问题

  java中长整型定义intx=0x80000000;System.out.println(x);longy=0x100080000000;System.out.println(y);这样定义为什么不行编译时候错误:test.java:17:过大的整数:100080000000longy=0x100080000000;long不是64位吗,这样y应该

  java中长整型定义

  intx=0x80000000;

  System.out.println(x);

  longy=0x100080000000;

  System.out.println(y);

  这样定义为什么不行

  编译时候错误:

  test.java:17:过大的整数:100080000000

  longy=0x100080000000;

  long不是64位吗,这样y应该才48位啊~

  还有0x8000,0000到底是多少

  写成二进制不是应该

  1000,0000,0000,0000,0000,0000,0000,0000

  如果最高位算符号位的话,那不是变成0了?

  -2147483648是怎么来的?

  0x7fff,ffff是2147483647难道十六进制加了1换成十进制也加1在变符号?

1回答
2019-12-25 12:58
我要回答
请先登录
黄松华

  java整型有四种:byte(1字节),short(2字节),int(4字节),long(8字节)

  0x100080000000之所以超出范围,并不是long不能保存这么大,而是这个数是个int型数,所以当然超出了int范围(Theliteral0x100080000000oftypeintisoutofrange),在整数赋值时,右边默认都是int型,这时你将赋值语句修改为:

  longy=0x100080000000l;//(最后一个是小写L)指定它的类型为long型就可以了

  JVM资料:TheJVMoperandstackandlocalvariablesaredefinedtohold32-bitvalues.So64-bitlongvaluesthatarestoredontheoperandstackorinlocalvariablesmustberepresentedastwo32-bitentries.

  意思是JVM操作数栈及本地变量都定义成32位的值,所以存储在操作数栈或本地变量里的64位的long数值都必须被表示为两个32位的实体.

2019-12-25 13:02:29

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •