ФорумПрограммированиеPHP для идиотов → Как сдвинуть данные на 1 бит?

Как сдвинуть данные на 1 бит?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 6:15

    Я запамятовал, как в PHP сдвинуть на один бит данные, пробовал искать в гугле/мане ничего толком не нашел.

    Пример, есть строка:
    123


    0001
    0010
    0011


    надо сдвинуть данные на один бит влево, и получить

    246


    0010
    0100
    0110
    adw/0
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 6:38, спустя 22 минуты 59 секунд

    По идее можно добавить в начало 3 бита например и в конец 5, тогда в принципе я такого же эффекта добьюсь…
    Ну или пройтись по всем битам и перевернуть флаги (XOR)
    Спустя 61 сек.
    Короче почитав маны я так и понял, что мне придется каждый байт проходить, поэтому тема закрывается, это было ради интереса
    Спустя 127 сек.
    А вообще хотелось бы вырезать первый бит у строки

    00000001
    00000010
    00000011

    и переместить его в конец

    00000010
    00000100
    00000110
    adw/0
  • md5

    Сообщения: 11949 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 6:39, спустя 1 минуту 35 секунд

    holy shit )
    все умрут, а я изумруд
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 6:40, спустя 36 секунд

    adw0rd,
    $a << $b       Сдвиг влево
    Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает 'умножение на 2')  

    может так ?
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 5 ноября 2009 г. 6:42, спустя 1 минуту 48 секунд


    holy shit )
    He is unstoppable =)
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 6:46, спустя 4 минуты 40 секунд


    adw0rd,
    $a << $b       Сдвиг влево
    Все биты переменной $a сдвигаються на $b позиций влево (каждая позиция подразумевает 'умножение на 2')  

    может так ?
    вроде так во всех языках .. или я чтото путаю ..
    Сапожник без сапог
  • Timur

    Сообщения: 1068 Репутация: N Группа: Джедаи

    Spritz 5 ноября 2009 г. 6:48, спустя 1 минуту 47 секунд

    не понял, а что мешает циклом перебрать все символы и сдвинуть на один бит каждый ($s{$i} = $s{$i} << 1)
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 7:04, спустя 15 минут 31 секунду

    NRG, phpdude, в этом случае надо перебирать все байты
    Спустя 44 сек.
    Timur, 1 000 000 байтов
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 7:08, спустя 4 минуты 39 секунд

    adw0rd, может я чтото неправильно понял, но

    <?
    $str = "123";

    echo $str ."<br/>";
    $str <<= 1;

    echo $str;


    = 246)
    Спустя 14 сек.
    http://94.31.169.103/tests/bits.php
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 7:19, спустя 10 минут 47 секунд

    phpdude, потомучто это число, а у меня строка, если бы PHP не приводил к числу - у тебя бы ничего не вышло…

    123
    246


    test
    0
    Спустя 53 сек.
    Поэтому надо каждый символ привести к числу (ord($symbol)), а потом только сдвигать
    Спустя 66 сек.
    И когда 1 000 000 символов - это просто пиздец.
    Легче открыть файл, вырезать оттуда первый бит и вставить его в конец, чем перебирать 1 млн символов
    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 7:22, спустя 2 минуты 44 секунды

    adw0rd, а понял твою идею)) ну да проще вырезать в данной ситуации)))
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 7:30, спустя 8 минут 13 секунд

    а если перебирать каждый символ, то лучше уже проксорить )
    adw/0
  • vasa_c

    Сообщения: 3127 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 9:16, спустя 1 час 45 минут 29 секунд

    adw0rd, был бы не ты, НРГ с Дудом тебя бы давно послали в ман и нах :)
    А из файла ты как бит вырежешь?
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 9:37, спустя 21 минуту 25 секунд

    vasa_c, усилием мысли)
    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 5 ноября 2009 г. 10:24, спустя 46 минут 50 секунд


    adw0rd, был бы не ты, НРГ с Дудом тебя бы давно послали в ман и нах :)

    +1


    А из файла ты как бит вырежешь?
    еще не гуглил, надо подумать
    хотя задача была чисто академическая, на практике я ее не буду применять
    adw/0

Пожалуйста, авторизуйтесь, чтобы написать комментарий!