我想填充一个长数的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版本。
这个假设安全吗?
答案 0 :(得分:4)
是的,这个假设是安全的。来自JLS:
4.2。原始类型和值
整数类型为
byte
,short
,int
和long
,其值为8位,16位,分别为32位和 64位有符号二进制补码整数和char,其值为16位无符号整数,表示UTF-16代码单元(第3.1节)。
在two's complement中,-1
由包含所有1的位模式表示。
答案 1 :(得分:2)
这个假设安全吗?
是的,它由Java语言规范Section 4.2定义:
整数类型为
byte
,short
,int
和long
,其值为8位,16位,32位和64位分别签署了二进制补码整数...
您所描述的是two's complement整数的工作原理,-1是“所有位”。