Как я понял, нужно всё перевести все числа в двоичную систему и сравнить их - но получились результаты странные, например
7 = 00111 И так, сравниваем:
25 = 11001 00111 & 11001 = 00001 = 1
5 = 00101 00111 & 00101 = 00101 = 5
3 = 00011 00111 & 00011 = 00011 = 3
12 = 01100 00111 & 01100 = 00100 = 4
1 = 00001 00111 | 00001 = 00111 = 7
И как дальше?) Или не так всё?
package com.javarush.task.pro.task08.task0811;
/*
Побитовые операции
*/
public class Solution {
public static void main(String[] args) {
int x = 7;
x = x & 25;
x = x & 5;
x = x & 3;
x = x & 12;
x = x | 1;
System.out.println(x);
}
}
Gold Apple
24 уровень
Не понимаю прикола задачи)
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
random4real
18 апреля 2021, 16:54
Может кто-нибудь внятно объяснить решение?
0
Gold Apple iOS Developer
18 апреля 2021, 19:09
Давай обьясню, взамен на лайк))
Смотри, здесь мы переводим из десятичной системы в двоичную. Она работает следующим образом, например число 14:
1110, как мы посчитали?
В двоичной системе есть только 2 числа - это 1 и 0
Счёт начинается справа налево :
2^3 + 2^2 + 2^1 + 2^0 - это 1111, а если нам нужно 1101, то
2^3 + 2^2 + 0 + 2^0 = 2*2*2 + 2*2 + 1 (любое число в степени 0 равняется 1) = 8 + 4 + 1 = 13 (в десятичной системе)
Да, это такой перевод из двоичной в десятичную) Если нужно большее число, то например 1110101:
2^6 + 2^5 + 2^4 + 0 + 2^2 + 0 + 2^0
Если же нужно перевести из двоичной в десятичную, то нужно число постоянно делить на 2 и записывать остаток) После того, как у тебя получилось несколько остатков, а число кончилось - реверсни (напиши наоборот, с последнего числа остатки).
А конкретно здесь рассматривается пример бинарного сравнения - | и &.
Тут довольно простенько.
00111 & 11001 = 00001 - тут сравнивается в столбик (запиши на листике), если 1 (true) сверху и снизу - то это тоже равно 1(true), если сверху ИЛИснизу есть 0(false) - то записывается false, поскольку & - это сравнение И (и то и другое должно быть true).
А теперь сравним так:
00111 | 00001 = 00111 = 7 - здесь оператор ИЛИ, то есть, если хотя бы где нибудь будет true, то записывается true. (либо одна единичка, либо две, нужен сам факт наличия единички (true))
Обязательно запиши эти примеры на листик и тогда поймешь) Более подробно можешь почитать в книжке Шилдта
+21
VladimirMaster
8 апреля 2021, 18:15полезный
Читай и наслаждайся.
+4
hidden #2322530
8 апреля 2021, 18:14решение
а почему ты каждый раз сравниваешь изначальное значение? ведь X каждый раз принимает результат)
у тебя здесь
уже х = 00001 = 1
почему ты при следующей операции берёшь другое значение?
должно быть так:
+5
Gold Apple iOS Developer
8 апреля 2021, 18:41
Ааа, вот оно как...спасибо)
0