Java:操作数字中的位

Java: manipulate bits in a number

我试图在 Java 中实现一个位操作工具。 我不想使用 Bitsetclass.

我正在使用 64 位 Long 值并实现了以下方法:

static final long toggle_bit(long number, int index) {
    return (number ^= (1 << index));
}

static final long set_bit(long number, int index) {
    return (number |= (1 << index));
}

static final long unset_bit(long number, int index) {
    return (number &= ~(1 << index));
}

static final void print_bits(long number) {
    String s = Long.toBinaryString(number);
    String zeros = "0000000000000000000000000000000000000000000000000000000000000000"; //String of 64 zeros
    s = zeros.substring(s.length()) + s;
    System.out.println(s);
}

我认为显示我的问题的最佳方式是这段代码的结果:

>>> print_bits(set_bit(0L, 30));
0000000000000000000000000000000001000000000000000000000000000000

>>> print_bits(set_bit(0L, 31));
1111111111111111111111111111111110000000000000000000000000000000

I assume I am reaching negative values or something like that. I would be very happy if someone could show me a very efficient way of manipulating all 64 bits in a long-number.

您好, 芬恩

使 index1 成为 long(声明为 1L)以便 JVM 不会将其视为整数。

我还必须注意,在 set_bits 中,|=(或等于)不考虑该位何时为 1,但该位的所需值是 0

您正在移动 1 的 int 值。尝试移动 1 的 long 值,即 1L << index