在uint和int上不能按位[重复]

问题描述 投票:-1回答:1

这个问题在这里已有答案:

所以我很困惑为什么我得到这个错误。

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

为什么不允许这样做,我做错了什么?

c# casting bit-manipulation
1个回答
1
投票

运算符的右侧需要是一个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;
}
© www.soinside.com 2019 - 2024. All rights reserved.