我试图在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位。
问候, 芬兰
答案 0 :(得分:2)
将index
和1
设为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;
}