【发布时间】:2016-01-07 14:17:32
【问题描述】:
我对 Java 如何使用 long 和 int 感到困惑...
获取以下代码:
long l1 = 0xFF00000000000000L;
System.out.println(Long.toHexString(l1));
l1 = 15;
System.out.println(Long.toHexString(l1));
我假设用这条线
l1 = 15;
数字 15 默认为 int,因此只会将 32 位复制到 l1 变量,并且不会影响 long 变量的高 32 位。
换句话说,我希望输出是
ff00000000000000
ff0000000000000f
相反,我得到了
ff00000000000000
f
为什么?
【问题讨论】:
-
为什么你认为将 new 值赋给变量会保留 old 值的一部分?
-
您为变量分配了一个值
15,并且您希望它的值是-72057594037927921?! -
听起来你是从 Cobol 来的?
-
我认为将
int的32位复制到long的最简单方法是longVal = longVal & 0xFFFFFFFF00000000L | intVal & 0x00000000FFFFFFFFL。 -
确实,我提出了一个愚蠢的问题,事情就是因为我认为常数默认为 int.... 我认为:l1 = 15L --> 分配了 64 位,并且使用 l1 = 15 --> 只有 32 位被分配为 15 个默认值给 int 类型)。但显然不是。那么使用 L 后缀的目的是什么?
标签: java type-conversion assignment-operator