Как работает побитовый оператор XOR ('^')?

Я заметил, что если некоторые серверы (например, Apache2) не настроены на то, чтобы специально разрешить или запретить любое «кэширование», то сервер по умолчанию может отправить «кэшированный» ответ, даже если вы установите заголовки HTTP на «no- кэш». Поэтому убедитесь, что ваш сервер не «кэширует» что-либо до того, как он отправит ответ:

В случае Apache2 вы должны

1) отредактировать файл «disk_cache.conf» - для отключения кеша добавить директиву «CacheDisable / local_files»

2) загрузить модули mod_cache (в Ubuntu «sudo a2enmod cache» и «sudo a2enmod disk_cache»)

3) перезапустить Apache2 (Ubuntu «sudo service apache2 restart»);

Это должно сделать трюк, отключающий кеш на стороне сервера. Ура! :)

24
задан Peter Mortensen 28 December 2015 в 15:54
поделиться

5 ответов

Это похоже на замену значения с помощью XOR . Хотя я не уверен в строках в PHP (обычно вы используете его для целых чисел или чего-то еще). Таблицу истинности XOR вы можете посмотреть здесь .

Интересно, что XOR обратимо: A XOR B XOR B == A ... который не работает с AND или OR ]. Из-за этого его можно использовать, как в вашем примере, чтобы поменять местами два значения:

$x ^= $y;
$y ^= $x;
$x ^= $y;

означает:

$x = $x ^ $y
$y = $y ^ ($x ^ $y)                // = $x
$x = ($x ^ $y) ^ ($y ^ ($x ^ $y))  // = $y
11
ответ дан 28 November 2019 в 23:24
поделиться

^ - это побитовый оператор «исключающее ИЛИ». По-английски это читается как «либо, либо». Результатом будет 1, если и только если оба бита различаются:

1 ^ 0 = 1
1 ^ 1 = 0
0 ^ 0 = 0

Немного упрощая пример (и используя псевдокод):

$x = 0011 //binary
$y = 0010

$x = $x xor $y
//Result: x = 0001

//x = 0001
//y = 0010
$y = $y xor $x
//Result: y = 0011

//x = 0001
//y = 0011
$x = $x xor $y
//Result: x = 0010

Все, что сделал PHP, это обработал строку «a» и «b» как их целое число. эквиваленты.

20
ответ дан 28 November 2019 в 23:24
поделиться

В этом примере, когда вы используете символы ^, они приводятся к целым числам. Итак,

"a" ^ "b"

то же самое, что:

ord("a") ^ ord ("b")

, за одним исключением. В первом примере результат был возвращен в строку. Например:

"a" ^ "6" == "W"

из-за:

ord("a") ^ ord("6") == 87

и

chr(87) == "W"
7
ответ дан 28 November 2019 в 23:24
поделиться

Оператор ^ выполняет операцию XOR над битовыми значениями каждой переменной. XOR выполняет следующее:

a   = 1100
b   = 1010
xor = 0110

x - результат операции XOR. Если биты равны, результатом будет 0, если они разные, результатом будет 1.

В вашем примере ^ = выполняет XOR и присваивание, и вы меняете биты между двумя переменными $ x и $ y.

Подробнее здесь http://en.wikipedia.org/wiki/Xor_swap_algorithm

1
ответ дан 28 November 2019 в 23:24
поделиться

Оператор Th ^ - это побитовый оператор, то есть он работает с каждым битом своих операндов.

Он возвращает значение, в котором каждый бит равен 1 , если два соответствующих бита в операндах не равны, и 0 , если они равны.

Например:

   100110110
 ^ 010001100   
 = 110111010
6
ответ дан 28 November 2019 в 23:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: