C# – 快速比较2个整数,逐位比较,输出多于一个整数,可能吗?

我有两个输入整数和一个输出列表 myoutputlist。 我的意见可以说
A = 0x 110101
B = 0x 101100

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

C = 0x 0 1 00 1 0(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>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 

如果两个输入“不同”,则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; }