这段代码有什么解释?

时间:2015-05-29 22:18:48

标签: c++

实际上它是一个黑客问题,一个孤独的整数。我理解这里使用的XOR逻辑。我只是无法深入理解输入后如何处理每个数字的概念。我在代码中标记了这一行。请帮助我理解它。

#include <iostream>
using namespace std;

int main()
{
    int n, a, c = 0, i;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin >> a;
        c ^= a; // THIS LINE .... i WANT TO KNOW HOW IS THIS WORKING ?
        // HOW IS COMPARISON BEING CARRIED OUT HERE ?
    }
    cout << a << endl;
    return 0;
}

1 个答案:

答案 0 :(得分:2)

程序找到孤独的数字,即不是成对的数字。将数字与自身进行异或会导致0。使用这个概念,所有数字都是逐个异或的。对一对数字进行xored,然后在输入序列中使用另一个数字对结果进行xored,依此类推。最后,单个号码将被保留。
例如:

输入1 1 2 3 0 0 3

1 ^ 1 = 0
0 ^ 2 = 2 
2 ^ 3 = 1 
1 ^ 0 = 1
1 ^ 0 = 1
1 ^ 3 = 2  

2很孤单。