有任何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没有位旋转指令。
答
C#中没有原始操作符来执行您正在寻找的操作。
忽略方法调用的性能影响(如果您正在执行移位操作,您可能会关心),这将是Int32上扩展方法的良好选择。
答
我不认为有C#。请参阅此页获取C#操作员列表:http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx。
我认为他们在你的问题中显示的方式可能是最快的方法。我认为Java可能会有一个像以前那样的转换运算符,但不是一个Java程序员,我无法证实这一点。
+0
我看到别人的回答打败了我。 – 2009-06-08 01:14:06
的确,根据http://en.csharp-online.net/CIL_Instruction_Set,CIL中有三条移位指令,但没有旋转指令。这是有道理的,因为我知道没有(非汇编)编程语言有位旋转运算符,所以为什么CIL应该支持它? – David 2009-06-08 02:59:33