Как ДЕЙСТВИТЕЛЬНО работает XOR, и какова волшебство?JAVA

Программисты JAVA общаются здесь
Anonymous
 Как ДЕЙСТВИТЕЛЬНО работает XOR, и какова волшебство?

Сообщение Anonymous »

Вопрос, возможно, немного вводит в заблуждение, но я не знал, как спросить об этом.
В Hackerrank есть проблема, которая заключается в следующем: < /p>


Рассмотрим массив целых чисел, где все, кроме одного из целых чисел.
встречается парами. Другими словами, каждый элемент в ровно в два раза
, за исключением одного уникального элемента. [2,3,1,3,2] -> Результат -1 < /p>
< /blockquote>



Я решил проблему, как:

private static int lonelyInteger(int[] a) {
if(a==null)
return 0;

if(a.length

Как бы то ни было, что существует аккуратное решение этой проблемы: < /p>

private static int lonelyInteger(int[] a) {
int b = a[0];

for(int i = 1; i < a.length; i++){
b ^= a;
}
return b;
}
< /code>

Проблема в том, что я не знаю, почему это работает?!
Я понимаю, как это работает, но не понимаю, почему это работает?
, чтобы понять, что я сделал небольшую программу для вывода результатов каждого шага: < /p>

public class BitwiseOperator {

public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] a = new int[n];
int sum = 0;
in.nextLine();
String line = in.nextLine();
String[] numbers = line.split(" ");
for (int i = 0; i < numbers.length; i++) {
a = Integer.valueOf(numbers);
}

for (int i = 0; i < a.length; i++) {
binary(sum, a);
sum ^= a;
binary(sum);
System.out.println();
System.out.println();
System.out.println();

}
System.out.println(sum);
}

private static void binary(int sum) {
System.out.println(String.format("%16s", Integer.toBinaryString(sum)).replace(' ', '0') + " ->" + sum);
}

private static void binary(int sum, int i) {
System.out.println(String.format("%16s", Integer.toBinaryString(sum)).replace(' ', '0') + " ->" + sum);
System.out.println("XOR");
System.out.println(String.format("%16s", Integer.toBinaryString(i)).replace(' ', '0') + " ->" + i);
System.out.println("--------");
}

}
< /code>

Если вы введете следующий ввод: < /p>

5 < /p>

2 3 2 1 3 < /p>

Выход: < /p>

0000000000000000 ->0
XOR
0000000000000010 ->2
--------
0000000000000010 ->2

0000000000000010 ->2
XOR
0000000000000011 ->3
--------
0000000000000001 ->1

0000000000000001 ->1
XOR
0000000000000010 ->2
--------
0000000000000011 ->3

0000000000000011 ->3
XOR
0000000000000001 ->1
--------
0000000000000010 ->2

0000000000000010 ->2
XOR
0000000000000011 ->3
--------
0000000000000001 ->1

1
< /code>

Так что программа на самом деле работает, но мне действительно нужно понять, почему?

Подробнее здесь: https://stackoverflow.com/questions/436 ... -behind-it

Вернуться в «JAVA»