ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Циклический битовый сдвиг в PHP
  #1  
Старый 03.06.2010, 19:35
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию Циклический битовый сдвиг в PHP

Очень нужно реализовать на PHP функцию циклического сдвига 32 битного числа.

в ассемблере просто всё - ror/rol а в PHP такого нет.
Вообще нашел только << и >> но это не циклический сдвиг.
Пытался сам реализовать через операции
$k = $k >> 3 + $k << 29;

В других языках (компилируемых) такое прокатилобы, а вот в PHP почемуто не пашет.
 
Ответить с цитированием

  #2  
Старый 03.06.2010, 19:46
Pashkela
Динозавр
Регистрация: 10.01.2008
Сообщений: 2,841
Провел на форуме:
9220514

Репутация: 3338


Отправить сообщение для Pashkela с помощью ICQ
По умолчанию

http://www.rinatous.com/blog/node/1.html
 
Ответить с цитированием

  #3  
Старый 03.06.2010, 19:52
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

и? В чем смысл того, что ты дал? Там рассматриваются непосредственно операции над битами, это есть в любой доке по PHP
А тут нужно именно циклический сдвиг
 
Ответить с цитированием

  #4  
Старый 03.06.2010, 20:15
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

фуф. вопрос решил сам. почемуто такое стало работать
$k = ($k << 29) + ($k >> 3);
и в одном месте chr() забыл

Последний раз редактировалось slesh; 03.06.2010 в 20:19..
 
Ответить с цитированием

  #5  
Старый 03.06.2010, 20:29
roxblnfk
Познающий
Регистрация: 07.02.2010
Сообщений: 70
Провел на форуме:
217996

Репутация: 56
Отправить сообщение для roxblnfk с помощью ICQ
Post

Такое работает не при всех вариантах. Если левый бит равен 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>';

Результат:
Цитата:
11111100110011001100110011000000
01111110011001100110011001100000
00111111001100110011001100110000
00011111100110011001100110011000
00001111110011001100110011001100
00000111111001100110011001100110
00000011111100110011001100110011
10000001111110011001100110011001
11000000111111001100110011001100
01100000011111100110011001100110
00110000001111110011001100110011
10011000000111111001100110011001
11001100000011111100110011001100
01100110000001111110011001100110
00110011000000111111001100110011
10011001100000011111100110011001
11001100110000001111110011001100
01100110011000000111111001100110
00110011001100000011111100110011
10011001100110000001111110011001
11001100110011000000111111001100
01100110011001100000011111100110
00110011001100110000001111110011
10011001100110011000000111111001
11001100110011001100000011111100
01100110011001100110000001111110
00110011001100110011000000111111
10011001100110011001100000011111
11001100110011001100110000001111
11100110011001100110011000000111
11110011001100110011001100000011
11111001100110011001100110000001
11111100110011001100110011000000
При использовании твоего кода:
Цитата:
11111100110011001100110011000000
11111110011001100110011001100000
11111111001100110011001100110000
11111111100110011001100110011000
11111111110011001100110011001100
11111111111001100110011001100110
11111111111100110011001100110011
01111111111110011001100110011001
10111111111111001100110011001100
01011111111111100110011001100110
00101111111111110011001100110011
10010111111111111001100110011001
11001011111111111100110011001100
01100101111111111110011001100110
00110010111111111111001100110011
10011001011111111111100110011001
11001100101111111111110011001100
01100110010111111111111001100110
00110011001011111111111100110011
10011001100101111111111110011001
11001100110010111111111111001100
01100110011001011111111111100110
00110011001100101111111111110011
10011001100110010111111111111001
11001100110011001011111111111100
01100110011001100101111111111110
00110011001100110010111111111111
10011001100110011001011111111111
11001100110011001100101111111111
11100110011001100110010111111111
11110011001100110011001011111111
11111001100110011001100101111111
11111001100110011001100110000000
как видно в первых строках нули не появляются слева

Последний раз редактировалось roxblnfk; 03.06.2010 в 20:34.. Причина: Добавил результ
 
Ответить с цитированием

  #6  
Старый 03.06.2010, 21:18
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

Цитата:
Сообщение от slesh  
фуф. вопрос решил сам. почемуто такое стало работать
$k = ($k << 29) + ($k >> 3);
ну да, надо скобки ставить. и в сях вообще-то тоже надо. У сдвигов приоритет выше (вроде) только чем у присваивания.
И лучше не + писать, а |.
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Books PSalm69 Избранное 248 27.10.2009 04:52
На PHP, как на "Новые ворота"... Mertvii-Listopad Чужие Статьи 7 18.09.2006 12:42
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ