首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个数xor后集位的奇偶校验

两个数xor后集位的奇偶校验
EN

Stack Overflow用户
提问于 2018-05-20 20:05:18
回答 4查看 3.7K关注 0票数 4

我通过在C++中进行测试找到了一个观察结果。

观察是,

1)如果两个数都有数的集合位数,则XOR的集合位数为偶数数。

2)如果两个数都含有数的集合位,则其异或中包含偶数位数。

1)如果两个数,一个数有偶数的集合位,,另一个数有奇数的集合位,则它的XOR中有奇数的集合位数。

我无法证明这一点。我想证明这一点。请帮帮我。

我在计算机上执行的代码是

代码语言:javascript
复制
#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个

如果在理解代码方面有疑问,请在评论中告诉我。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-05-20 20:47:32

谢谢所有想要回答的人。

我们可以提供这样的证据,

假设N是第一个数中的集合位数,M是第二个数中的设置位数。

然后,这两个数字中的set位是N+M -2 (Δ),其中δ是两个数字都设置了位的位位置的总数。这个表达式解释了每一件事。

偶数+奇数-偶=奇

奇+奇-偶数=偶数

偶数+偶-偶=偶

票数 5
EN

Stack Overflow用户

发布于 2018-05-20 20:18:00

这种行为反映了一个易于证明的算术事实:

  • 当你加上两个奇数,你得到一个偶数,
  • 当你加上两个偶数,你得到一个偶数,
  • 当你把一个奇数加到一个偶数时,你就得到了一个奇数。

有了这个事实,请考虑XOR的真值表,并注意,对于表中的四个选项({0, 0 => 0}{0, 1 => 1}{1, 0 => 1}{1, 1, => 0})中的每一个选项,1s计数的奇偶校验。换句话说,如果输入有奇数的1s,输出也会有奇数的1s,反之亦然。

这个观察解释了观察结果的原因:XOR对两个数字加上NM的集合位数,将产生一个与N+M具有相同的奇偶校验的数字。

票数 5
EN

Stack Overflow用户

发布于 2018-05-20 20:20:52

xor刚刚清除了常见的比特。不管设置了多少位,只要有多少位是常见的。

对于所有的比特,结果为零。由于没有共同的位,结果是集合位的和。

除非您还考虑到公共比特的均等,否则没有基于输入平价的结论。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50438913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档