Я пытался реализовать на 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
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 и 1long (объявите как 1L), чтобы JVM не рассматривала их как целое число.
Я также должен отметить, что в set_bits|= (или равно) не учитывает, когда бит - 1, но желаемое значение в бите - 0.
Хм, как насчет замены 1 на 1L?
Вы сдвигаете значение int, равное 1. Попробуйте сдвинуть длинное значение, равное 1, т.е. 1L << index.
Я пробовал использовать долгий, но все тот же результат. Что ты имеешь в виду?