在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'类型的操作数
答案 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