Java:操作数字中的位
Java: manipulate bits in a number
我试图在 Java 中实现一个位操作工具。
我不想使用 Bitset
class.
我正在使用 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.
您好,
芬恩
使 index
和 1
成为 long
(声明为 1L
)以便 JVM 不会将其视为整数。
我还必须注意,在 set_bits
中,|=
(或等于)不考虑该位何时为 1
,但该位的所需值是 0
您正在移动 1 的 int 值。尝试移动 1 的 long 值,即 1L << index
我试图在 Java 中实现一个位操作工具。
我不想使用 Bitset
class.
我正在使用 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.
您好, 芬恩
使 index
和 1
成为 long
(声明为 1L
)以便 JVM 不会将其视为整数。
我还必须注意,在 set_bits
中,|=
(或等于)不考虑该位何时为 1
,但该位的所需值是 0
您正在移动 1 的 int 值。尝试移动 1 的 long 值,即 1L << index