PHP

PHP Задача. Помогите пожалуйста. Всё написал в пояснении.

8. Дайте ответ на вопрос, как работает оператор xor? В каких случаях он возвращает значение true, в каких – false? Для этого напишите скрипт, который выводит значения операций со всеми возможными вариантами операндов (4 варианта). Чему равно 100 xor 100 для любых значений 100?
E K описывает не xor, а ^ - и даже это делает с ошибками. Операция ^ - это "не равно" для каждой пары битов: если биты равны (оба 0 или оба 1) результатом будет бит со значением 0. Если биты не равны (0 и 1 или 1 и 0) результатом будет 1.

Потому в его примере правильный ответ: 1100 0011 ^ 1111 0101 = 0011 0110

Соответственно, ^ двух одинаковых чисел ВСЕГДА даёт 0 - независимо от системы счисления. Потому 100 ^ 100 = 0

Операция xor в PHP работает немного иначе. Cначала оба операнда приводятся к логическому типу: "пустое" значение (false, 0, '0', '', [], null) преобразуется в false, всё остальное - в true. А потом к получившимся логическим значениям применяется операция "не равно".

Фактически, выражение $a xor $b полностью эквивалентно выражению ((bool)$a) != ((bool)$b)

Потому и 1100100 xor 1100100, и 100 xor 100 дадут false - т. к. любые ненулевые операнды будут преобразованы в true, а true xor true равно false.
Roman Kolmykov
Roman Kolmykov
51 310
Лучший ответ
Антон Дробышевский Андрей, спасаешь и спасаешь, огромное спасибо за твои старания, скинь свой кошелёк, когда у меня деньги будут - обязательно скину
http://php.net/manual/ru/language.operators.bitwise.php

XOR действует так: он побитово сравнивает значение и если биты разнятся, оставляет значение "1", если же значение обоих бит совпадает, результат инвертирует. Т. е. если и там и там "1", то результат - "0".
например, возьмём два байта и "заиксорим" их:
1100 0011 и 1111 0101

Результат будет:
0011 1110

100 - это "сто" или это двоичное число?
Если 100 - в десятичной системе счисления, то:
100 xor 100 будет выглядеть так в двоичной:
1100100 xor 1100100 = 0011011

Если 100 - это двоичное число, то
100 xor 100 = 011
Павел Юшков
Павел Юшков
12 482
Антон Дробышевский Капец, я ещё на паре в университете двоичные, восьмиричные нихуя не понимал, а тут п. зда