За последние 24 часа нас посетили 23777 программистов и 1604 робота. Сейчас ищут 833 программиста ...

Побитовые операторы & ASCII

Тема в разделе "PHP для новичков", создана пользователем iNEEdhLw, 22 янв 2015.

  1. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    в общем, интереса ради хотелось бы узнать, как происходит работа при выполнении операции "исключающее или" (см. также "сложение по модулю-2) со строками?
    в мануале сказано:
    в случае если операнды являются числами все ясно, они преобразовываются в свой эквивалент в двоичной системе и дальше уже по правилам того или иного оператора выполняются вычисления.
    например 5 & 7 = (101 & 111) = (101)
    но если это строки, то идёт преобразование в ascii-эквивалент, а что дальше? ну, что-то въехать не могу.
    ведь там диапазон от 0 до 255 - все эти числа преобразовываются в двоичное представление?.. или он просто от 57 отнял 49 (если брать цифры с вышеприведенного примера).
    крч, яннп.
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    49 = 0011-0001
    57 = 0011-1001
    49^57 = 0000-1000 = 8

    ксор он как бы включает биты которые РАЗНЫЕ а все остальные биты получают нулевое значение.
     
  3. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    ага, то есть интерпретатор берет ascii-эквивалент строки и дальше просто в двоичном виде выполняет указанные мною действия, понял.
    ещё вопрос: почему он взял только символ "1" из строки "12"?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а как ты ожидаешь оно должно было обработать?
     
  5. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    возможно выполнить операцию дизъюнкции или конъюнкции, а уже результат использовать как один из операндов для ксора.
    я, конечно, могу предполагать как оно должно было обработать, но оно обработало именно так - и это главное. я должен понять почему)
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    покажи как. не словами а как на лабораторке покажи мне по шагам чо там как у каких битиков-байтиков.
     
  7. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    есть строка "12", каждый символ которой переводим в ascii-эквивалент, т.е. 49 и 50 соответственно.
    49 в двоичной системе счисления 0011-0001 (1*2^5 + 1*2^4 + 1)
    50 в двоичной системе счисления 0011-0010 (1*2^5 + 1*2^4 + 2)
    есть строка "9" имеющая всего 1 символ, в ascii-эквиваленте которая равняется 57.
    57 в двоичной с.с. : 0011-1001(1*2^5 + 1*2^4 + 1*2^3 +1)
    как я сказал выше, "12" может быть подвергнуто дизъюнкции, тогда:
    либо конъюнкции, тогда:
    ну, и полученный рез-ат применять в выражении result ^ 0000-1000
     
  8. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    у тебя одна строка в два байта и одна строка в один байт. выравнивание идет по короткой последовательности. то есть будет взято от длинной стоки столько байт сколько в короткой. сделай например:
    '12' ^ '91' - обработает оба байта
    '12' ^ '911' - обработает опять оба байта
     
  9. iNEEdhLw

    iNEEdhLw Новичок

    С нами с:
    22 окт 2014
    Сообщения:
    414
    Симпатии:
    0
    интересно. как это ты такое вычислил? )
    в теме мануала, касающейся побитовых операций, такого не описывается :(
     
  10. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    банально в скрипте напиши три строки да посмотри какая между ними разница))))))))) на самом деле ключевые слова "выравнивание" и "порядок байтов" думаю тебе дадут немного интересной информации для размышления.