好的开始,我正在使用Managed DirectX和shader model 3.0,我正在尝试创建按位运算符的软件实现。因此,对于XOR,它看起来像这样:
dword Xor(dword x, dword y)
{
dword result=0, mult=1;
while (x > 0 || y > 0)
{
result += (x%2 != y%2) * mult;
x /= 2;
y /= 2;
mult *= 2; //internal error: l-value expected
}
}
经过大量的实验并尝试欺骗编译器后,我得出以下结论:编译器不允许任何导致本地声明的整数乘以整数的东西。哪个真的很奇怪。我可以将x或y(参数)乘以2但不是多。我无法将其添加到自身,或除以0.5或其他类似的东西。
有人可以为此提出解释吗?另外,有人知道更好的Xor实现(在Google上找不到)。没有比特移位。
感谢。