Есть ли в C # оператор побитового сдвига, который перемещает переполненные биты в другой конец переменной? - PullRequest
0 голосов
/ 08 июня 2009

Давайте назовем это «<<<» </p>

int32variable <<< numberOfBits

равно

(int32variable << numberOfBits) | (int32variable >> (32 - numberOfBits))

(Предполагая, что << и >> отбрасывает переполненные биты)

Есть такой оператор?

Ответы [ 4 ]

4 голосов
/ 08 июня 2009

Это было бы вызванным поворотом бита, и в C # такого оператора нет.

Вот интересный пост: Есть ли способ выполнить циклический битовый сдвиг в C #?

Обратите внимание, что ваш int32integer должен иметь тип uint (unsigned int).

Я полагаю, что битовое вращение является инструкцией в наборе инструкций Intel, но, насколько мне известно, в CLR нет команд битового вращения.

1 голос
/ 08 июня 2009

Это называется побитовым вращением. У других языков есть, но у C # нет. См. этот вопрос , чтобы получить более подробную информацию, но суть в том, что ваш нынешний подход настолько хорош, насколько вы можете.

0 голосов
/ 08 июня 2009

Я не думаю, что есть для C #. Смотрите на этой странице список операторов C #: http://msdn.microsoft.com/en-us/library/6a71f45d(vs.71).aspx.

Я думаю, что то, что вы показали в своем вопросе, возможно, самый быстрый способ сделать это. Я думаю, что в Java может быть оператор сдвига, подобный тому, который вам нужен, но я не являюсь программистом Java, я не могу этого подтвердить.

0 голосов
/ 08 июня 2009

В C # нет примитивного оператора, который бы делал то, что вы ищете.

Игнорирование последствий для производительности при вызове метода (если вы выполняете операции битового сдвига, вас это может волновать), это было бы хорошим кандидатом для метода расширения в Int32.

...