3

我想填充一个长的Java数组,以便它的所有位都设置为1。我发现相应的长值是-1,或“0xFFFFFFFFFFFFFFFFl”:

long l = -1L;
System.out.println(Long.toBinaryString(l));

"1111111111111111111111111111111111111111111111111111111111111111"

所以我用Arrays.fill()1 填充数组:

final long allBitsOn = -1L;
long[] bits = new long[arrayLength];
Arrays.fill(bits, allBitsOn);

这个数组是一个主要项目的基础架构,我想完全确定 long 有 64 位,并且long(-1)在所有 VM 实现和 Java 的未来版本中,它的所有位总是设置为 1。

这个假设安全吗?

4

2 回答 2

4

是的,假设是安全的。从JLS

4.2. 原始类型和值

整数类型为byte, short, int, and long,其值分别为 8 位、16 位、32 位和64 位有符号二进制补码整数,以及 char ,其值是表示 UTF-16 的 16 位无符号整数代码单元(§3.1)。

二进制补码中,-1由全为 1 的位模式表示。

于 2012-11-27T07:23:08.990 回答
2

这个假设安全吗?

是的,它由 Java 语言规范第 4.2 节定义:

整数类型为byteshortintlong,其值分别为 8 位、16 位、32 位和 64 位有符号二进制补码整数...

您所描述的是二进制补码整数如何工作,-1 是“所有位”。

于 2012-11-27T07:22:23.137 回答