我搜索的方法做在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
你可以提供一個例子,我可以看到它並沒有實際旋轉,低階「轉移?我對看到這種情況很感興趣(或者說:不會發生)。 –