java中长整型定义int x=0x80000000;System.out.println(x);long y=0x100080000000;System.out.println(y);这样定义为什么不行编译时候错误:test.java:17:过大的整数:100080000000long y=0x100080000000;long不是64位吗,这样y应该
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/16 01:26:34
java中长整型定义int x=0x80000000;System.out.println(x);long y=0x100080000000;System.out.println(y);这样定义为什么不行编译时候错误:test.java:17:过大的整数:100080000000long y=0x100080000000;long不是64位吗,这样y应该
java中长整型定义
int x=0x80000000;
System.out.println(x);
long y=0x100080000000;
System.out.println(y);
这样定义为什么不行
编译时候错误:
test.java:17:过大的整数:100080000000
long y=0x100080000000;
long不是64位吗,这样y应该才48位啊~
还有0x8000,0000到底是多少
写成二进制不是应该
1000,0000,0000,0000,0000,0000,0000,0000
如果最高位算符号位的话,那不是变成0了?
-2147483648是怎么来的?
0x7fff,ffff是2147483647难道十六进制加了1换成十进制也加1在变符号?
java中长整型定义int x=0x80000000;System.out.println(x);long y=0x100080000000;System.out.println(y);这样定义为什么不行编译时候错误:test.java:17:过大的整数:100080000000long y=0x100080000000;long不是64位吗,这样y应该
java整型有四种:byte(1字节),short(2字节),int(4字节),long(8字节)
0x100080000000 之所以超出范围,并不是long不能保存这么大,而是这个数是个int型数,所以当然超出了int范围(The literal 0x100080000000 of type int is out of range),在整数赋值时,右边默认都是int型,这时你将赋值语句修改为:
long y=0x100080000000l;//(最后一个是小写L)指定它的类型为long型就可以了
JVM资料:The JVM operand stack and local variables are defined to hold 32-bit values.So 64-bit long values that are stored on the operand stack or in local variables must be represented as two 32-bit entries.
意思是JVM 操作数栈及本地变量都定义成32位的值,所以存储在操作数栈或本地变量里的64位的long数值都必须被表示为两个32位的实体.