Поверните бит в Java [duplicate]

Я решил. Я побежал:

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 и выше). `

23
задан RealSkeptic 11 May 2015 в 08:32
поделиться

5 ответов

Чтобы установить бит, используйте:

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
59
ответ дан nook 18 August 2018 в 02:22
поделиться
  • 1
    К сожалению, я должен упомянуть, что я хочу, чтобы он был динамическим, означает позицию pass как аргумент, а не фиксированное значение. – Arpssss 18 August 2012 в 04:37
  • 2
    Ссылка мертва ... – Martynas 28 October 2014 в 07:05
  • 3
    Стоит упомянуть, как проверить бит: правый сдвиг и И bit = (x >> y) & 1 – Anatoly Yakimchuk 15 September 2017 в 11:16
  • Преобразование long в битсет
  • Установите бит, который вам нужен, чтобы
  • Преобразовать биттете назад в длинный

См. этот пост BitSet для целых чисел / long для методов преобразования long в битсет и наоборот

-1
ответ дан Community 18 August 2018 в 02:22
поделиться
  • 1
    Использование битов может работать, но я не рекомендую конвертировать назад и вперед только для манипуляции бит. Решите, хотите ли вы использовать long или bitet и придерживайтесь его. – ronalchn 18 August 2012 в 05:02

Наименее значимый бит (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)
7
ответ дан push2eject 18 August 2018 в 02:22
поделиться

См. класс java.util.BitSet, который выполняет задание для вас.

Чтобы установить: myByte.set(bit); Сбросить: myByte.clear(bit); Заполнить bool: myByte.set(bit, b); Чтобы получить bool: b = myByte.get(bit);

-1
ответ дан sebyku 18 August 2018 в 02:22
поделиться

Я выбрал бы 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
3
ответ дан SiB 18 August 2018 в 02:22
поделиться
  • 1
    Не используйте BigInteger. Он не был предназначен для управления битами (медленный?!?). Если вам нужен бит бит бит, используйте биты. – ronalchn 18 August 2012 в 05:28
Другие вопросы по тегам:

Похожие вопросы: