2009-12-27 15 views

Respuesta

20

Es el bitwise not operator (también llamado "complemento"). Es decir, los bits configurados en ~ $a son los que no están configurados en $a.

Entonces

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE 

es los bits puestos en E_ALL y los que no están establecidos en E_STRICT, E_WARNING y E_NOTICE. Esto básicamente dice todos los errores, excepto los estrictos, de advertencia y de notificación.

15

Es el bitwise-not operator. Por ejemplo, la negación a nivel de bits de un número con representación binaria 01011110 sería 10100001; cada bit está volteado a su opuesto.

+0

Aunque esa es la explicación técnica, esa explicación no es útil a menos que se dé cuenta de que 'E_STRICT',' E_WARNING', 'E_NOTICE' et. Alabama. son enteros y se combinan simultáneamente con el operador '' 'bitwise. – IQAndreas

1

Ver Bitwise Operators: es el operador "not" (citando):

~ $a
bits que están activos en $a están no se establece, y viceversa.


Lo que significa, tomando un ejemplo inspirado de lo que usted envió, que esta porción de código:

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

Le conseguirá este resultado:

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

(Añadir una par de 0 para el relleno a la izquierda de la primera línea, y verá lo que quiero decir)


Extracción del relleno de la segunda salida, se obtiene:

100000000000 
011111111111 

Lo que significa que el operador ~ dio un poco 0 para cada bit que era igual a 1 en el insumo de factor - y viceversa ,

5

La distinción entre bit a bit (&, |, ~) y no a nivel de bits (& &, ||,!) Se operadores se aplican a nivel de bits que a través de todos los bits de en el entero, mientras que no bit a bit trata un entero como un único valor "verdadero" (distinto de cero) o "falso" (cero).

Diga, $flag_1 = 00000001 y $flag_2 = 00000010.Ambos serían "verdaderos" para las operaciones no bit a bit, ($flag_1 && $flag_2 es "verdadero"), mientras que el resultado de $flag_1 & $flag_2 sería 00000000 y el resultado de $flag_1 | $flag_2 sería 00000011. ~$flag_2 sería 11111101, que cuando se ejecuta a nivel de bit a una ejecución El resultado sería claro esa posición de bit (xxxxxx0x). $flag_2 bit-ORed a un resultado en ejecución sería establecer esa posición de bit (xxxxxx1x).