@koshiii

Как разобраться с битовыми операциями в Java?

int a = 0xFF0;
int b = 0xF0F;
int c = 0x0FF;
c = a = (a ^ b | a & b) ^ c;
System.out.println((c | a) ^ (c & a));
==
Даёт результат 0
распишите мне пошаговый план решения
так как бы вы решили на бумаге, а то ничего не ясно как бы ни старался
по идее необходимо переводить из 16 в 2, но это же дико долго
должен быть способ попроще.
прошу Вашей помощи
  • Вопрос задан
  • 2373 просмотра
Пригласить эксперта
Ответы на вопрос 6
mrusklon
@mrusklon
Не получается? Яростно гугли!
использовать >>> или <<< ?
Ответ написан
Комментировать
mbelskiy
@mbelskiy
Software Developer
"Я ленивый и ничего не хочу делать. Сделайте за меня." –так вы ни к чему не придёте.
Сконвертить из 16 -> 2 буквально пару секунд или в гугле забанили? А там уж загуглить принцип работы и приоритет логических операций не должно быть проблемой
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
16 -> 2
Это же сдвиг на 3 бита вправо, самая что ни на есть быстрая операция
Ответ написан
anyd3v
@anyd3v
"по идее необходимо переводить из 16 в 2, но это же дико долго"
любой вменяемый калькулятор сделает это за вас в течении пары милисекунд
Ответ написан
по идее необходимо переводить из 16 в 2, но это же дико долго

0xFF0 = подобные числа переводятся элементарно - F это 1111.
0xFF0 == 111111110000
Ответ написан
Комментировать
@gurinderu
java developer
Не надо тут ничего конвертировать, тут нужно смотреть на булеву логику.

А именно на (c | a) ^ (c & a) . Если c=a это выражение всегда дает 0. Поскольку если с=a=1 то слева будет 1 и справа будет 1, то операция xor вернет 0. Для 0 слева и справа будет 0, xor тоже 0 )
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы