簡體   English   中英

這個〜運算符在這里意味着什么?

[英]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_STRICTE_WARNINGE_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 按位運算符。 在這里閱讀按位運算符:

http://php.net/manual/en/language.operators.bitwise.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM