Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > циклический сдвиг битов влево(вправо)


Автор: AlexiZ 25.2.2010, 19:10
Здравствуйте,
Как реализовать на C# циклический битовый сдвиг?
Например, циклический сдвиг влево на 3 бита:  1011100 -> 1100101

Если делать обычный сдвиг, то увеличивается длина числа (при сдвиге влево) или теряются биты и правом сдвиге.

Заранее благодарен за ответы

Автор: AlexiZ 25.2.2010, 23:04
Вроде сам разобрался.
Здесь есть неплохое обсуждение - http://stackoverflow.com/questions/35167/is-there-a-way-to-perform-a-circular-bit-shift-in-c
Но вариант
Код

private UInt32 RotateLeft(UInt32 x, Byte n)
{
      return (UInt32)(((x) << (n)) | ((x) >> (32 - (n))));
}


на мой взгляд неверен.

и вот, что я понаписал - 

Код

static UInt32 RotateLeft(UInt32 value, int count)
{
      return (value >> count) + ( ((value << (32 - count)) >> (32 - count)) << count );
}


с этой функцией корректно выполнилось действие 1011100 -> 1100101

Автор: LEX555 25.2.2010, 23:10
Ну вы работаете чисто с int-овыми значениями) представление двоичной системы неплохо обсуждается здесь:
http://forum.codenet.ru/showthread.php?t=54131

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)