按位桶式换档问题在C#中左右旋转

时间:2011-09-02 21:19:17

标签: c# bit-manipulation rotation bit-shift

在C ++中我有这样的代码。

    static UInt32 rol(UInt32 value, UInt32 bits)
    {
        bits &= 31;
        return ((value << bits) | (value >> (32 - bits)));
    }

    static UInt32 ror(UInt32 value, UInt32 bits)
    {
        bits &= 31;
        return ((value >> bits) | (value << (32 - bits)));
    }

它在C#中看起来如何?我认为同样的方式..只有问题

  

错误2运营商'&gt;&gt;'不能应用于'uint'和'uint'类型的操作数   错误3运算符'&gt;&gt;'不能应用于'uint'和'uint'类型的操作数   错误1运算符'&lt;&lt;'不能应用于'uint'和'uint'类型的操作数   错误4运算符'&lt;&lt;'不能应用于'uint'和'uint'类型的操作数

3 个答案:

答案 0 :(得分:1)

您应该在移位运算符中使用int类型作为右侧变量。

答案 1 :(得分:1)

您必须将bitshift运算符的右侧强制转换为int。如果你像(int)(32 - bits)那样投射,它不应该影响你的预期目的。右边只是期待一个int,可能是因为它更简单,并且你不太可能想要超过20亿位。

答案 2 :(得分:1)

右操作数必须始终为int。

 int x << int bits
 uint x << int bits
 long x << int bits
 ulong x << int bits