[英]What does this ~ operator mean here?
例:
set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);
這意味着什么?
它是按位非運算符 (也稱為“補碼”)。 也就是說~ $a
中設置的位是未在$a
設置$a
。
那么
E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE
是E_ALL
設置的位以及未在E_STRICT
, E_WARNING
和E_NOTICE
設置的位。 這基本上表示除嚴格,警告和通知錯誤之外的所有錯誤。
它是bitwise-not運算符 。 例如,具有二進制表示01011110
的數字的按位否定將是10100001
; 每一位都翻轉到相反的位置。
按位(&,|,〜)和非按位(&&,||,!)運算符之間的區別在於,按位應用於整數中的所有位,而非按位則將整數視為單個“true”(非零)或“假”(零)值。
比如說, $flag_1 = 00000001
和$flag_2 = 00000010
。 對於非按位運算,兩者都是“真”,( $flag_1 && $flag_2
為“true”),而$flag_1 & $flag_2
的結果為00000000,結果為$flag_1 | $flag_2
$flag_1 | $flag_2
將是00000011. ~$flag_2
將是11111101,當按位與運行結果進行AND運算將清除該位位置(xxxxxx0x)。 $flag_2
按位或運算結果將設置該位位置(xxxxxx1x)。
請參閱按位運算符 :它是“非”運算符(引用) :
~ $a
未設置$a
中設置的位,反之亦然。
這意味着,從你發布的內容中汲取靈感,這部分代碼:
var_dump(decbin(E_STRICT));
var_dump(decbin(~E_STRICT));
會得到這個輸出:
string '100000000000' (length=12)
string '11111111111111111111011111111111' (length=32)
(在第一行的左邊添加幾個填充0
,你會看到我的意思)
從第二個輸出中刪除填充,您會得到:
100000000000
011111111111
這意味着~
運算符為每個在輸入中等於1
位賦予0
位 - 反之亦然,
這not
按位運算符。 在這里閱讀按位運算符:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.