Я искал методы, чтобы сделать бинарный вращающийся сдвиг в C#, и наткнулся на хорошие ответы, как https://stackoverflow.com/a/812039/204693 или https://stackoverflow.com/a/35172/204693C# двоичный сдвиг автоматически поворачивается
Я хотел создать TestCase для этого сценария, где невращающийся сдвиг будет служить в качестве отрицательного теста, но потом я наткнулся на то, что это:
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
Можете ли вы представить пример, где я вижу, что он фактически не вращается и демонстрирует " низкое "смещение? Я очень заинтересован в том, чтобы это произошло (точнее: не произошло). –