E_ALL^E_NOTICE
和E_ALL & ~E_NOTICE
有什麼區別?E_ALL^E_NOTICE和E_ALL&〜E_NOTICE之間的區別
據我所知,他們都排除了E_NOTICE
級別的錯誤報告。但在PHP.ini
中使用了&~
的形式,而我在很多地方看到的形式是^
。
E_ALL^E_NOTICE
和E_ALL & ~E_NOTICE
有什麼區別?E_ALL^E_NOTICE和E_ALL&〜E_NOTICE之間的區別
據我所知,他們都排除了E_NOTICE
級別的錯誤報告。但在PHP.ini
中使用了&~
的形式,而我在很多地方看到的形式是^
。
^
和&~
之間有區別,但在這種情況下沒有區別。
^
表示異或,因此在結果中設置在左操作數或右操作數中設置但不是兩者的位。 &~
表示AND NOT,因此在結果中設置在左操作數中設置但不在右操作數中的位。
如果我們看下面的數字,將有一個區別:
$a = 0b1010; // decimal 10
$b = 0b0001; // decimal 1
$a^$b
結果0b1011
(十進制11),而$a & ~$b
結果0b1010
(十進制10)。
然而,E_ALL
實際上是0b11111111
(即所有的位都被設置;實際上它多於8位)。所以異或實際上和AND NOT是一樣的。
$a = 0b11111111; // decimal 255
$b = 0b00000100; // decimal 4
$a^$b
給出0b11111011
(十進制251)一樣,$a & ~$b
。
不錯。即將寫這個,但你擊敗了我:) –
所以如果我想排除一個特定的位從'$ a'說,而不確定它是否設置在'$ a'我需要使用'AND不是「運營商,對嗎? –
@Maximus是的,正好。 – lonesomeday
第一個符號是E_ALL
和E_NOTICE
之間的異或。第二種表示法是AND
的一個按位運算符,適用於E_NOTICE
。這兩個條件在技術上不相同,因爲第一個XOR
可以改寫爲((E_ALL & ~E_NOTICE) | (~E_ALL & E_NOTICE))
。
參考:php.net/manual/en/language.operators.bitwise.php
編輯的完整性:傑克和lonesomeday指出,由於E_ALL擁有所有設置爲1的相關位,你在其中的兩個條件是等價的特殊情況。
如果第一個操作數的所有位都是1,則xor重寫的第二部分是多餘的:) –
php.net/manual/en/errorfunc.constants.php – djot
@djot這不是問題。 –
OP實際需要知道什麼:http://www.php.net/manual/en/language.operators.bitwise.php – skrilled