Очень нужно реализовать на PHP функцию циклического сдвига 32 битного числа. в ассемблере просто всё - ror/rol а в PHP такого нет. Вообще нашел только << и >> но это не циклический сдвиг. Пытался сам реализовать через операции $k = $k >> 3 + $k << 29; В других языках (компилируемых) такое прокатилобы, а вот в PHP почемуто не пашет.
и? В чем смысл того, что ты дал? Там рассматриваются непосредственно операции над битами, это есть в любой доке по PHP А тут нужно именно циклический сдвиг
фуф. вопрос решил сам. почемуто такое стало работать $k = ($k << 29) + ($k >> 3); и в одном месте chr() забыл
Такое работает не при всех вариантах. Если левый бит равен 1, то заливка слева после смещения будет единицами, что при сложении не допустимо.. Написал код (про моём тестировании всё нормально): PHP: $k=bindec('11111100110011001100110011000000'); echo sprintf('%032b',$k).'<br>'; for($a=1;$a<=32;$a++){ $b=32-$a; $s = (($k >> $a) & ~(-pow(2,$b)))^($k << $b); echo sprintf('%032b',$s).'<br>'; } Результат: При использовании твоего кода: как видно в первых строках нули не появляются слева
ну да, надо скобки ставить. и в сях вообще-то тоже надо. У сдвигов приоритет выше (вроде) только чем у присваивания. И лучше не + писать, а |.