Проблема с побитовым сдвигом ствола Поверните влево и вправо в C # - PullRequest
1 голос
/ 03 сентября 2011

В C ++ у меня есть такой код.

    static UInt32 rol(UInt32 value, UInt32 bits)
    {
        bits &= 31;
        return ((value << bits) | (value >> (32 - bits)));
    }

    static UInt32 ror(UInt32 value, UInt32 bits)
    {
        bits &= 31;
        return ((value >> bits) | (value << (32 - bits)));
    }

как бы это выглядело в C #? Я думаю точно так же .. единственная проблема

Ошибка 2 Оператор «>>» не может быть применен к операндам типа «uint» и «uint»
Ошибка 3 Оператор «>>» не может быть применен к операндам типа «uint» и «uint»
Ошибка 1 Оператор «<<» не может быть применен к операндам типа «uint» и «uint» <br> Ошибка 4 Оператор «<<» не может быть применен к операндам типа «uint» и «uint» </p>

Ответы [ 3 ]

1 голос
/ 03 сентября 2011

Вам нужно будет привести правую часть оператора bithift к int. Если вы разыгрываете как (int)(32 - bits), это не должно повлиять на вашу цель. Правая сторона просто ожидает int, вероятно потому, что так проще и очень маловероятно, что вы когда-нибудь захотите сдвинуть более 2 миллиардов бит.

1 голос
/ 03 сентября 2011

Правильный операнд должен всегда иметь тип int.

 int x << int bits
 uint x << int bits
 long x << int bits
 ulong x << int bits
1 голос
/ 03 сентября 2011

Вы должны использовать тип int для правой переменной в операторах сдвига.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...