这个问题在这里已有答案:
所以我很困惑为什么我得到这个错误。
Operator '<<' cannot be applied to operands of type 'int' and 'uint'
一切都是uint类型但它不接受它。
这是算法:
public void Test(uint[] arr, uint b)
{
for (uint x = 0; x < arr.Length; x++)
{
uint reverse = 0;
for (uint i = 0; i < bits; i++)
{
reverse |= (((x & (1 << i)) >> i) & 1) << (b - 1 - i);
}
arr[x] = reverse;
}
}
为什么不允许这样做,我做错了什么?
运算符的右侧需要是一个int,如C#规范中所示
Standard ECMA-334 - 12.10 Shift operators
...
声明重载的移位运算符时,第一个操作数的类型应始终是包含运算符声明的类或结构,第二个操作数的类型应始终为int
可能最容易使用int
,然后在最后将其转换为uint
for (var x = 0; x < arr.Length; x++)
{
var reverse = 0;
for (var i = 0; i < bits; i++)
{
reverse |= (((x & (1 << i)) >> i) & 1) << ((int)b - 1 - i);
}
arr[x] = (uint)reverse;
}