gpt4 book ai didi

c - 如何在 C 中使用 mod 2 加法制作 XOR?

转载 作者:太空宇宙 更新时间:2023-11-04 00:56:40 24 4
gpt4 key购买 nike

我读到 XOR 等同于 mod 2 加法。不过,我的假设是这是位级别的。意思是,5 XOR 10 不等于 (5 + 10) mod 2,因为那将是 1,这是不正确的。因此,我编写了以下函数:

unsigned char XOR_BIT(unsigned char A, unsigned char B)
{
unsigned char x;
unsigned char y;
unsigned char c;
unsigned char o;
unsigned char output = 0;
for(c = 0; c < 8; c++)
{
printf("=========Round %u=============\n", c);
x = (A & (1 << c));
printf("x: %u\n", x);
y = (B & (1 << c));
printf("y: %u\n", y);
o = (x + y) % 2;
printf("o: %u\n", o);
output |= (o << c);
printf("output: %u\n", output);
}
return output;
}

但是,这会输出以下内容:

=========Round 0=============
x: 1
y: 0
o: 1
output: 1
=========Round 1=============
x: 0
y: 2
o: 0
output: 1
=========Round 2=============
x: 4
y: 0
o: 0
output: 1
=========Round 3=============
x: 0
y: 8
o: 0
output: 1
=========Round 4=============
x: 0
y: 0
o: 0
output: 1
=========Round 5=============
x: 0
y: 0
o: 0
output: 1
=========Round 6=============
x: 0
y: 0
o: 0
output: 1
=========Round 7=============
x: 0
y: 0
o: 0
output: 1
MyXOR: 1
Standard XOR: 15

我怀疑我误解了所需的按位运算,或者我有一个代码错误,但我不太了解这个领域的必要知识来确定问题。

此函数的预期行为是:

  1. 一次抓取每个字节 1 位
  2. 对每对位执行模 2 加法
  3. 将每个结果位存储在输出中
  4. 将输出位返回为 1 个字节

最佳答案

您在进行模运算之前添加移位值(xy 在模运算之前应该为 0 或 1)。您应该使用

x = (A >> c) & 1;
y = (B >> c) & 1;

然后您将它们相加,进行模运算,然后将位存储到 output 中,就像您已经在做的那样。

关于c - 如何在 C 中使用 mod 2 加法制作 XOR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58551891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com