@arcuda

Регистр сдвига с линейной обратной связью на C#?

Помогите пожалуйста с РСЛОС.
Пытаюсь написать алгоритм на основе статьи из ВИКИ.
Вот мой код:
int S = 0x00000001;
        private void RandomLFSR (object sender, RoutedEventArgs e)
        {            
            S = ((((S >> 31) ^ (S >> 30) ^ (S >> 29) ^ 
                (S >> 27) ^ (S >> 25) ^ S )) 
                    & 0x00000001 ) << 31 | S >> 1;
            output.Text += S.ToString();             
        }

В итоге получается вот такая последовательность:


-2147483648-1073741824-536870912-268435456-134217728-67108864-33554432-16777216-8388608-4194304-2097152-1048576-524288-262144-131072-65536-32768-16384-8192-4096-2048-1024-512-256-128-64-32-16-8-4-2-1-1-1-1-1-1-1-1


В чем ошибка? Помогите пожалуйста :)
  • Вопрос задан
  • 1797 просмотров
Решения вопроса 1
вообще смотреть выходные данные лучше в двоичном представлении, тогда будет понятнее
наудачу предположу, что дело в этом:
x >> y — сдвиг битов вправо .Если левым операндом является int или long, затем левые биты заполняются битом знака.Если левым операндом является uint или ulong, затем левые биты заполняются нулем.
то есть попробуйте беззнаковый тип
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vilgeforce
Раздолбай и программист
Ошибка как всегда в том, что не используется отладчик.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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