long的Java按位表示是否有所不同?
我想填充一个长的Java数组,这样它的所有位都被设置为1。我发现,或“0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL”: 因此,我使用long的Java按位表示是否有所不同?,java,arrays,bit-manipulation,long-integer,fill,Java,Arrays,Bit Manipulation,Long Integer,Fill,我想填充一个长的Java数组,这样它的所有位都被设置为1。我发现,或“0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFL”: 因此,我使用Arrays.fill()将数组填充为1: final long allBitsOn = -1L; long[] bits = new long[arrayLength]; Arrays.fill(bits, allBitsOn); 这个数组是一个主要项目的基本基础设施,我想完全确定long有64位,并且long(-1)在所有VM实现
Arrays.fill()
将数组填充为1:
final long allBitsOn = -1L;
long[] bits = new long[arrayLength];
Arrays.fill(bits, allBitsOn);
这个数组是一个主要项目的基本基础设施,我想完全确定long有64位,并且long(-1)
在所有VM实现和Java的未来版本中,其所有位都将始终设置为1
这个假设安全吗
这个假设安全吗
是的,它是由Java语言规范定义的:
整数类型有字节
、短
、整数
、和长
,其值分别为8位、16位、32位和64位带符号的二补整数
你所描述的是整数是如何工作的,-1是“所有位都打开的”。是的,假设是安全的。从: 4.2。基本类型和值 整数类型有
字节
、短
、整数
和长
,其值分别为8位、16位、32位和64位有符号二位补整数,以及char,其值为代表UTF-16码单元的16位无符号整数(§3.1)
在中,
-1
由所有的位模式组成。不知道您是否意外地错过了它,但是您从中了解如何设置长的so post指定它必须是:长l=-1L代码>。L在那里待了一段时间。Cheers@Daneo:long l=-1代码>和长l=-1L代码>生成完全相同的字节码()。当然,有时您需要L
,但在将文本-1
分配给长
时则不需要。当然,这不是一个好的做法。@T.J.Crowder感谢您的澄清,并予以确认。现在可能没有必要这样做,但只是为了防止类似不采用这种做法的情况。正如那个链接所说,不应用L会使它自动转换,并且在值符合整数大小的情况下,这会起作用。我认为最好不要依赖这些。@Daneo:同意,总是最好把它写出来。更新了我的答案-总是很好的明确。
final long allBitsOn = -1L;
long[] bits = new long[arrayLength];
Arrays.fill(bits, allBitsOn);