2014-03-05 15 views
3

E_ALL^E_NOTICEE_ALL & ~E_NOTICE有什麼區別?E_ALL^E_NOTICE和E_ALL&〜E_NOTICE之間的區別

據我所知,他們都排除了E_NOTICE級別的錯誤報告。但在PHP.ini中使用了&~的形式,而我在很多地方看到的形式是^

+2

php.net/manual/en/errorfunc.constants.php – djot

+4

@djot這不是問題。 –

+3

OP實際需要知道什麼:http://www.php.net/manual/en/language.operators.bitwise.php – skrilled

回答

3

^&~之間有區別,但在這種情況下沒有區別。

^表示異或,因此在結果中設置在左操作數或右操作數中設置但不是兩者的位。 &~表示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

+0

不錯。即將寫這個,但你擊敗了我:) –

+0

所以如果我想排除一個特定的位從'$ a'說,而不確定它是否設置在'$ a'我需要使用'AND不是「運營商,對嗎? –

+1

@Maximus是的,正好。 – lonesomeday

1

第一個符號是E_ALLE_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的相關位,你在其中的兩個條件是等價的特殊情況。

+2

如果第一個操作數的所有位都是1,則xor重寫的第二部分是多餘的:) –