2009-12-27 26 views

risposta

20

È il bitwise not operator (chiamato anche "complemento"). I bit impostati in ~ $a sono quelli che non sono impostati in $a.

Allora

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE 

è il bit impostati in E_ALL e quelli che non impostato in E_STRICT, E_WARNING e E_NOTICE. Questo in pratica dice tutti gli errori tranne gli errori severi, di avvertimento e di avviso.

15

È il bitwise-not operator. Ad esempio la negazione bit per bit di un numero con rappresentazione binaria 01011110 sarebbe 10100001; ogni singolo bit è invertito al suo opposto.

+0

Sebbene questa sia la spiegazione tecnica, questa spiegazione non è utile a meno che non si accorga che 'E_STRICT',' E_WARNING', 'E_NOTICE' et. al. sono interi e vengono contemporaneamente combinati con l'operatore bitmap '&'. – IQAndreas

1

Vedi Bitwise Operators: è il "non" operatore (citando):

~ $a
bit impostati in $a sono non impostato, e viceversa.


Il che significa, prendendo un esempio ispirato da ciò che hai postato, che questa porzione di codice:

var_dump(decbin(E_STRICT)); 
var_dump(decbin(~E_STRICT)); 

ti porterà questa uscita:

string '100000000000' (length=12) 
string '11111111111111111111011111111111' (length=32) 

(Aggiungi un coppia di 0 per imbottitura a sinistra della prima riga, e vedrete cosa intendo)


Rimozione l'imbottitura dalla seconda uscita, si ottiene:

100000000000 
011111111111 

Il che significa che l'operatore ~ ha dato un po '0 per ogni bit che è stato pari a 1 nel gli input - e viceversa ,

5

La distinzione tra bit a bit (&, |, ~) e non-bit a bit (& &, ||,!) Gli operatori è che bit a bit vengono applicati attraverso tutti bit nel numero intero, mentre non a un bit viene considerato un intero come un singolo valore "vero" (diverso da zero) o "falso" (zero).

Say, $flag_1 = 00000001 e $flag_2 = 00000010.Entrambi sarebbero "veri" per operazioni non bit a bit, ($flag_1 && $flag_2 è "true"), mentre il risultato di $flag_1 & $flag_2 sarebbe 00000000 e il risultato di $flag_1 | $flag_2 sarebbe 00000011. ~$flag_2 sarebbe 11111101, che quando bitwise-AND a un utente in esecuzione risultato sarebbe chiaro quella posizione di bit (xxxxxx0x). $flag_2 bit a bit - OR con un risultato in esecuzione imposta in quella posizione di bit (xxxxxx1x).

Problemi correlati