Что здесь означает этот оператор?
Пример:
set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);
что это значит?
5 ответов
Это побитовый оператор not (также называемый "дополнение"). Это биты, установленные в ~ $a
те, которые не установлены в $a
,
Итак, тогда
E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE
это биты, установленные в E_ALL
и те, которые не установлены в E_STRICT
, E_WARNING
а также E_NOTICE
, Это в основном говорит обо всех ошибках, кроме строгих, предупреждений и уведомлений об ошибках.
Это побитовый оператор. Например, побитовое отрицание числа с двоичным представлением 01011110
было бы 10100001
; каждый бит переворачивается на противоположную.
Различие между побитовыми (&, |, ~) и небитовыми (&&, ||,!) Операторами заключается в том, что побитовые применяются ко всем битам в целом числе, а не побитовые обрабатывают целое число как одно "истинное" (ненулевое) или "ложное" (нулевое) значение.
Сказать, $flag_1 = 00000001
а также $flag_2 = 00000010
, И то, и другое будет "истиной" для небитовых операций, ($flag_1 && $flag_2
это "правда"), в то время как результат $flag_1 & $flag_2
будет 00000000 и результат $flag_1 | $flag_2
будет 00000011. ~$flag_2
будет 11111101, который при побитовом И к результату выполнения очистит эту битовую позицию (xxxxxx0x). $flag_2
побитовое ИЛИ к результату выполнения установит эту битовую позицию (xxxxxx1x).
Это not
побитовый оператор. Читайте о побитовых операторах здесь:
Смотрите побитовые операторы: это оператор "не" (цитирование):
~ $a
Биты, которые установлены в$a
не установлены, и наоборот.
Это означает, что, взяв пример, вдохновленный тем, что вы опубликовали, эта часть кода:
var_dump(decbin(E_STRICT));
var_dump(decbin(~E_STRICT));
Вы получите этот вывод:
string '100000000000' (length=12)
string '11111111111111111111011111111111' (length=32)
(Добавить пару 0
для заполнения слева от первой строки, и вы поймете, что я имею в виду)
Сняв отступ со второго вывода, вы получите:
100000000000
011111111111
Что означает ~
Оператор дал 0
бит для каждого бита, который был равен 1
в интуту - и наоборот,