Java的按位表示长吗?

时间:2012-11-27 07:20:49

标签: java arrays bit-manipulation long-integer fill

我想填充一个长数的Java数组,以便它的所有位都设置为1.我发现corresponding long value is -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)总是将所有位设置为1,跨所有VM实现和未来Java版本。

这个假设安全吗?

2 个答案:

答案 0 :(得分:4)

是的,这个假设是安全的。来自JLS

  

4.2。原始类型和值

     

整数类型为byteshortint long ,其值为8位,16位,分别为32位和 64位有符号二进制补码整数和char,其值为16位无符号整数,表示UTF-16代码单元(第3.1节)。

two's complement中,-1由包含所有1的位模式表示。

答案 1 :(得分:2)

  

这个假设安全吗?

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

  

整数类型为byteshortintlong,其值为8位,16位,32位和64位分别签署了二进制补码整数...

您所描述的是two's complement整数的工作原理,-1是“所有位”。