C# - 逐位比较 2 个整数并输出多个整数的快速方法,可能吗?

C# - fast way to compare 2 integers, bit by bit, and output for more than one integer, possible?

我有两个输入整数和一个输出列表 myoutputlist。我的输入可以说
A=0x110101
B=0x101100

然后我根据A和B计算了一个C整数numbers.I已经编码了它的算法,我可以计算C整数。 C 整数显示应更改哪些位。 1 值表示变化的位,0 值表示不变的位。每次只能改变一位。由于 C 整数取决于 A 和 B 输入,有时需要更改 1 位,有时 3 位,有时 8 位。在这个给定的 A 和 B 值中,我有 C 整数如下

C=0x 010010(1代表变化的值;在这种情况下应该改变第二和第五位)

因为 C 整数有两次值为“1”;在这种情况下应该有 2 个结果

结果1-只改变第二位,其他位同A(0x110101) :
改变 A 的第二位 => D1=1101 1 1

结果2-只改变第五位,其他位同A(0x110101):
改变 A 的第五位 => D2=1 1 0101

我在想的是用for循环,一步步移动A和C,然后用&1掩码给C?并检查它是否等于“1”

for(i=0;i<32;i++)  
{int D=(C>>i)&1;     //I tried to check if i.th value is equal to 1 or not
 if(D==1) 
   {   int E=(A&(~(2^i))) | ((2^i)&(~B)) //in first brackets, I removed i.th bit of A, then replaced it with "not B" value.  
       myoutputlist.add(E); 
   }
}

我需要做很多计算,但令人不安的问题是我需要检查 (D==1) 32 次。我将使用它数百万次,一些计算大约需要 2 分钟。我正在寻找一种更快的方法。有什么想法,技巧吗?

希望我理解你的问题。

您正在寻找 XOR 运算符。

C = A ^ B

A 110101
B 101100
--------
C 011001
如果两个输入为 "different",

XOR 将始终为 1。参见:

| A | B | XOR |
|---+---+-----|
| 0 | 0 |  0  |
| 0 | 1 |  1  |
| 1 | 0 |  1  |
| 1 | 1 |  0  |

然后你将能够像这样循环遍历 C 的位:

for (int i = 0; i < 32; i++)
{
    bool bit = (C & (1 << i)) != 0;
}