有任何C#按位移位运算符将溢出位移动到变量的另一端?

问题描述:

让我们把它称为 “< < <”有任何C#按位移位运算符将溢出位移动到变量的另一端?

int32variable <<< numberOfBits 

等于

(int32variable << numberOfBits) | (int32variable >> (32 - numberOfBits)) 

(假设< <和丢弃>>飞越位)

有这样的操作?

这将是一个被称为位旋转和C#没有这样的运算符。

这里有一个有趣的帖子: Is there a way to perform a circular bit shift in C#?

请注意,您int32integer应该是uint型(无符号整数)的。

我认为位旋转是英特尔指令集中的指令,但据我所知,CLR没有位旋转指令。

+0

的确,根据http://en.csharp-online.net/CIL_Instruction_Set,CIL中有三条移位指令,但没有旋转指令。这是有道理的,因为我知道没有(非汇编)编程语言有位旋转运算符,所以为什么CIL应该支持它? – David 2009-06-08 02:59:33

C#中没有原始操作符来执行您正在寻找的操作。

忽略方法调用的性能影响(如果您正在执行移位操作,您可能会关心),这将是Int32上扩展方法的良好选择。

这被称为按位旋转。其他语言有它,但C#没有。有关更多细节,请参阅this question,但其要点是您目前的方法与您所能做的一样好。

我不认为有C#。请参阅此页获取C#操作员列表:http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx

我认为他们在你的问题中显示的方式可能是最快的方法。我认为Java可能会有一个像以前那样的转换运算符,但不是一个Java程序员,我无法证实这一点。

+0

我看到别人的回答打败了我。 – 2009-06-08 01:14:06