Я обнаружил наблюдение путем тестирования на C ++.
Наблюдение:
1) Если два числа, в которых оба числа имеют нечетное количество установленных битов, то его XOR будет иметь четное числонабор битов в нем.
2) Если два числа, в которых оба числа имеют четное количество установленных битов, то в его XOR будет четное количество установленных бит
1) Если два числа, в которых одно число имеет четное число установленных бит , а другое имеет нечетное число установленных бит , то его XOR будет иметь нечетное количество установленных битов в нем.
Я не смог доказать это.Я хочу доказать это.Пожалуйста, помогите мне.
Код, который я выполнил на моем компьютере:
#include<bits/stdc++.h>
using namespace std;
int main(){
vector<int> vec[4];
for(int i=1;i<=100;i++){
for(int j=i+1;j<=100;j++){
int x=__builtin_popcount(i)%2;
int y=__builtin_popcount(j)%2;
int in=0;
in|=(x<<1);
in|=(y<<0);
int v=__builtin_popcount(i^j)%2;
vec[in].push_back(v);
}
}
for(int i=0;i<4;i++){
for(int j=0;j<vec[i].size();j++) cout<<vec[i][j] << " ";
cout << endl;
}
return 0;
}
Это дает мне
100 нулей в первой строке 100 единиц во второй строке 100 единиц в третьемстрока 100 нулей в четвертой строке
Если есть сомнения в понимании кода, пожалуйста, сообщите мне в комментариях.