Java:操作数字

时间:2018-05-26 11:46:23

标签: java long-integer bit

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

我正在使用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
  

我认为我正在达到负值或类似的东西。我会   如果有人能给我一个非常有效的方式,我会很高兴   操纵一个长数字中的所有64位。

问候, 芬兰

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

您正在移动int值1.尝试移动长值1,即void swap_node(punt node1, punt node2) { node1->next=node2->next; node2->next=node1; (node1->prev)->next=node2; node2->prev=node1->prev; node1->prev=node2; (node1->next)->prev=node1; }