Как работают битовые операции на Long в Java?

74
22 ноября 2021, 14:20

У меня есть следующий код:

@Test
public void simpleTest() {
    long x = 0;
    x |= 3L;
    System.out.println(showBits(x));
}
private String showBits(long x) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < 64; i++) {
        builder.append((x & (1 << i)) > 0 ? "1" : "0");
    }
    return builder.reverse().toString();
}

В результате я ожидал увидеть такую последовательность: 00...011, но на деле получилось:

0000000000000000000000000000001100000000000000000000000000000011

Я понимаю, что в int 32 бита, а в long 64. Мне непонятно, почему в long типе обновляются оператором или каждые 32 бита, а не только первые.

Если вывести через System.out.println(x), то будет 3. А почему тогда дублируется тройка в битовом представлении?

Кажется, что ошибка где-то в цикле при выполннении операции И.

READ ALSO
Не могу реализовать метод дешифровки XOR в JAVA

Не могу реализовать метод дешифровки XOR в JAVA

Задание, зашифровать строку через XOR и записать в фаил а потом прочитать, выполнить дешифровку и вывести в коснольМетод write реализовал а вот...

165
Вывод даты и времени в текстовом виде

Вывод даты и времени в текстовом виде

Есть таблица, где хранится дата в TimeShamp сохраняла так: В частности текущее значение TimeShamp для данной записи 1574610262000

75
Реализовать такой же способ сортировки, только для int

Реализовать такой же способ сортировки, только для int

Есть у меня ObservableList, который с файла сохраняет данные типов String, int, intВсе это добро у меня отображается в TableView

184