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; }