我搜索的方法做在C#中的二进制旋转移位,并跨越好的答案来了,像https://stackoverflow.com/a/812039/204693或https://stackoverflow.com/a/35172/204693C#二进制移位自动旋转
我想创造这个场景中,一个测试用例,其中非旋转转变将成为一个负测试,但后来我偶然发现的事实是这样的:
public static void Main()
{
Debug.WriteLine("1<<31 = " + Convert.ToString(1 << 31, 2).PadLeft(32, '0'));
Debug.WriteLine("1<<32 = " + Convert.ToString(1 << 32, 2).PadLeft(32, '0'));
}
提供以下的输出:
1<<31 = 10000000000000000000000000000000
1<<32 = 00000000000000000000000000000001
现在,这对我来说看起来很陌生,因为有很多答案提供了二进制移位和旋转的方法,如二进制等技巧。但是,似乎.NET的默认行为是旋转。
这种行为在.NET的新版本中是否发生了变化?我已经在Visual Studio 2010中将其用于.NET 2.0,并且它始终显示上述行为。
为什么人们为旋转位创建“聪明”的解决方案,如果这是默认行为?我在这里错过了什么吗?
这当然也意味着'(1 << 31)<< 4'是*不* “旋转”。所以你仍然必须实现自己的旋转位移。 – Luaan
换句话说:使用的“真实”移位计数是'(指定的移位计数)'%'(字长)' – Alex
你可以提供一个例子,我可以看到它并没有实际旋转,低阶“转移?我对看到这种情况很感兴趣(或者说:不会发生)。 –