Задать вопрос
@Serverprom

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

Здравствуйте! Пишу программу на C#. Имеется число, которое принимает значения от 0 до 255 (тип - Byte; 8 бит), в котором нужно выполнить циклический сдвиг битов вправо. Соответственно, после сдвига должно получиться число от 0 до 255.
Я нашел этот код:
int shr(int a, int s) {
  return (a>>s) | (a<<32-s);
}

Но он работает как-то странно - получаются числа, намного превышающие 255. Подскажите, как это реализовать? Заранее спасибо.
  • Вопрос задан
  • 6004 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Alexander1705
a = (a>>s) | ((a<<(8-s)) & 255)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vilgeforce
Раздолбай и программист
Ну разумеется они БУДУТ превышать 255! Во-первых, параметры и возвращаемое значение - int, а вам нужен char. Во вторых, явно прописана длина данных в 32 бита.
Ответ написан
Mrrl
@Mrrl
Заводчик кардиганов
((a*257)>>s)&255.
Будет работать быстрее, почему-то логические операции на C# очень дорогие по сравнению с умножением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы