Я решил. Я побежал:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
Ошибка вводит в заблуждение, Unsupported major.minor version 51.0
. Это создает впечатление, что версия 51 (Java 7) не поддерживается. И мы должны использовать Java 6.
Ошибка должна быть:
Текущая версия Java, 50, не поддерживается. Вместо этого используйте Java версии 7 (51: 0 и выше). `
blockquote>
Чтобы установить бит, используйте:
x |= 0b1; // set LSB bit
x |= 0b10; // set 2nd bit from LSB
, чтобы стереть бит:
x &= ~0b1; // unset LSB bit (if set)
x &= ~0b10; // unset 2nd bit from LSB
для переключения бит:
x ^= 0b1;
Обратите внимание, что я использую 0b ?. Вы также можете использовать любое целое число, например:
x |= 4; // sets 3rd bit
x |= 0x4; // sets 3rd bit
x |= 0x10; // sets 9th bit
Однако это затрудняет определение того, какой бит изменяется.
Использование двоичного файла позволяет вам видеть, какие точные биты будут
Чтобы динамически установить бит, используйте:
x |= (1 << y); // set the yth bit from the LSB
(1 << y)
сдвигает ... 001 y места слева, поэтому вы можете перемещать
Вы также можете установить несколько бит одновременно:
x |= (1 << y) | (1 << z); // set the yth and zth bit from the LSB
Или для отмены:
x &= ~((1 << y) | (1 << z)); // unset yth and zth bit
Или для переключения:
x ^= (1 << y) | (1 << z); // toggle yth and zth bit
См. этот пост BitSet для целых чисел / long для методов преобразования long в битсет и наоборот
Наименее значимый бит (lsb) обычно называют бит 0, поэтому ваша «позиция 2» действительно «бит 1».
long x = 0b001100; // x now = 0b001100
x |= (1<<1); // x now = 0b001110 (bit 1 set)
x &= ~(1<<2); // x now = 0b001010 (bit 2 cleared)
См. класс java.util.BitSet, который выполняет задание для вас.
Чтобы установить: myByte.set(bit);
Сбросить: myByte.clear(bit);
Заполнить bool: myByte.set(bit, b);
Чтобы получить bool: b = myByte.get(bit);
Я выбрал бы BigInteger для этого ...
class Test {
public static void main(String[] args) throws Exception {
Long value = 12L;
BigInteger b = new BigInteger(String.valueOf(value));
System.out.println(b.toString(2) + " " + value);
b = b.setBit(1);
b = b.clearBit(2);
value = Long.valueOf(b.toString());
System.out.println(b.toString(2) + " " + value);
}
}
и вот результат:
1100 12
1010 10
bit = (x >> y) & 1
– Anatoly Yakimchuk 15 September 2017 в 11:16