如何在 Java 中设置长整型中的 *any* 位,即使位位置> 30



我熟悉如何在 Java 数值变量中设置和清除特定位。 但我不确定如何在long中> 30 的位置操纵任何位.

我读过 Java 将longs处理为两个ints,堆大小小于 30gb。 将我的堆大小设置为 45gb(在 EC2 实例上(没有帮助。

确认我使用的是 64 位 Java:

$ java -version
openjdk version "1.8.0_71"
OpenJDK Runtime Environment (build 1.8.0_71-b15)
OpenJDK 64-Bit Server VM (build 25.71-b15, mixed mode)

有没有办法更改 Java long中任何位置的位?

我认为这是同一个问题,但对于 C. 但这对我没有帮助。

这是说明我的困境的代码和输出。 如您所见,它在第 31 位之前效果很好。

private static long setBit(long bits, int bitPosition) {
  return bits | (1 << bitPosition);
}
private static long clearBit(long bits, int bitPosition) {
  return bits & ~(1 << bitPosition);
}
public static void main(String[] args) {
  for (int i = 0; i < 64; i++) {
    long myLong = clearBit(Long.MAX_VALUE, i);
    System.out.println(Long.toBinaryString(myLong) + " " + i + " " + myLong);
  }
}

输出:

111111111111111111111111111111111111111111111111111111111111110 0 9223372036854775806
111111111111111111111111111111111111111111111111111111111111101 1 9223372036854775805
111111111111111111111111111111111111111111111111111111111111011 2 9223372036854775803
111111111111111111111111111111111111111111111111111111111110111 3 9223372036854775799
111111111111111111111111111111111111111111111111111111111101111 4 9223372036854775791
111111111111111111111111111111111111111111111111111111111011111 5 9223372036854775775
111111111111111111111111111111111111111111111111111111110111111 6 9223372036854775743
111111111111111111111111111111111111111111111111111111101111111 7 9223372036854775679
111111111111111111111111111111111111111111111111111111011111111 8 9223372036854775551
111111111111111111111111111111111111111111111111111110111111111 9 9223372036854775295
111111111111111111111111111111111111111111111111111101111111111 10 9223372036854774783
111111111111111111111111111111111111111111111111111011111111111 11 9223372036854773759
111111111111111111111111111111111111111111111111110111111111111 12 9223372036854771711
111111111111111111111111111111111111111111111111101111111111111 13 9223372036854767615
111111111111111111111111111111111111111111111111011111111111111 14 9223372036854759423
111111111111111111111111111111111111111111111110111111111111111 15 9223372036854743039
111111111111111111111111111111111111111111111101111111111111111 16 9223372036854710271
111111111111111111111111111111111111111111111011111111111111111 17 9223372036854644735
111111111111111111111111111111111111111111110111111111111111111 18 9223372036854513663
111111111111111111111111111111111111111111101111111111111111111 19 9223372036854251519
111111111111111111111111111111111111111111011111111111111111111 20 9223372036853727231
111111111111111111111111111111111111111110111111111111111111111 21 9223372036852678655
111111111111111111111111111111111111111101111111111111111111111 22 9223372036850581503
111111111111111111111111111111111111111011111111111111111111111 23 9223372036846387199
111111111111111111111111111111111111110111111111111111111111111 24 9223372036837998591
111111111111111111111111111111111111101111111111111111111111111 25 9223372036821221375
111111111111111111111111111111111111011111111111111111111111111 26 9223372036787666943
111111111111111111111111111111111110111111111111111111111111111 27 9223372036720558079
111111111111111111111111111111111101111111111111111111111111111 28 9223372036586340351
111111111111111111111111111111111011111111111111111111111111111 29 9223372036317904895
111111111111111111111111111111110111111111111111111111111111111 30 9223372035781033983
1111111111111111111111111111111 31 2147483647
111111111111111111111111111111111111111111111111111111111111110 32 9223372036854775806
111111111111111111111111111111111111111111111111111111111111101 33 9223372036854775805
111111111111111111111111111111111111111111111111111111111111011 34 9223372036854775803
111111111111111111111111111111111111111111111111111111111110111 35 9223372036854775799
111111111111111111111111111111111111111111111111111111111101111 36 9223372036854775791
111111111111111111111111111111111111111111111111111111111011111 37 9223372036854775775
111111111111111111111111111111111111111111111111111111110111111 38 9223372036854775743
111111111111111111111111111111111111111111111111111111101111111 39 9223372036854775679
111111111111111111111111111111111111111111111111111111011111111 40 9223372036854775551
111111111111111111111111111111111111111111111111111110111111111 41 9223372036854775295
111111111111111111111111111111111111111111111111111101111111111 42 9223372036854774783
111111111111111111111111111111111111111111111111111011111111111 43 9223372036854773759
111111111111111111111111111111111111111111111111110111111111111 44 9223372036854771711
111111111111111111111111111111111111111111111111101111111111111 45 9223372036854767615
111111111111111111111111111111111111111111111111011111111111111 46 9223372036854759423
111111111111111111111111111111111111111111111110111111111111111 47 9223372036854743039
111111111111111111111111111111111111111111111101111111111111111 48 9223372036854710271
111111111111111111111111111111111111111111111011111111111111111 49 9223372036854644735
111111111111111111111111111111111111111111110111111111111111111 50 9223372036854513663
111111111111111111111111111111111111111111101111111111111111111 51 9223372036854251519
111111111111111111111111111111111111111111011111111111111111111 52 9223372036853727231
111111111111111111111111111111111111111110111111111111111111111 53 9223372036852678655
111111111111111111111111111111111111111101111111111111111111111 54 9223372036850581503
111111111111111111111111111111111111111011111111111111111111111 55 9223372036846387199
111111111111111111111111111111111111110111111111111111111111111 56 9223372036837998591
111111111111111111111111111111111111101111111111111111111111111 57 9223372036821221375
111111111111111111111111111111111111011111111111111111111111111 58 9223372036787666943
111111111111111111111111111111111110111111111111111111111111111 59 9223372036720558079
111111111111111111111111111111111101111111111111111111111111111 60 9223372036586340351
111111111111111111111111111111111011111111111111111111111111111 61 9223372036317904895
111111111111111111111111111111110111111111111111111111111111111 62 9223372035781033983
1111111111111111111111111111111 63 2147483647

感谢您的阅读 - 任何指导/代码/建议将不胜感激!

1<<32会溢出,因为它是int。您必须将其更改为 long .

return bits | (1L << bitPosition)
private static long clearBit(long bits, int bitPosition) {
  return bits & ~(1l << bitPosition);
}

没有 l 的 1 是整数,那是你的错误。

最新更新