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

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

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

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

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

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