[Ir al menú de PHP]
Operadores bit a bit

Operadores bit a bit

Estas son las últimas funciones de manejo de cadenas.

$A & $B

El operador & compara los valores binarios de cada uno de los bits de las cadenas $A y $B y devuelve 1 en el caso que ambos sean 1 y 0 en cualquier otro caso.

Cuando las variables $A y $B son cadenas compara los valores binarios de los códigos ASCII de los caracteres y devuelve los caracteres ASCII correspondientes al resultado de esa comparación

$A | $B

Funciona de forma idéntica al anterior y devuelve 1 cuando al menos el valor de uno de los bits comparados es 1 y devolverá 0 cuando ambos sean 0.

$A ^ $B

Devuelve 1 cuando los bits comparados son distintos y 0 cuando son iguales.

$A << $B

Multiplica el valor de $A por 2$B.
Hace la operación en la cadena binaria añadiendo $B CEROS a la derecha de la cadena binaria de $A.
No tiene sentido con cadenas literales, $B tiene que ser un entero y trata las cadenas numéricas como números enteros.

$A >> $B

Divide el valor de $A por 2$B.
Hace la operación en la cadena binaria quitando $B CEROS por la derecha de la cadena binaria de $A.

~ $A

Invierte los valores de los bits de la cadena $A conviertiendo los CEROS en UNO y los UNO en CERO.


 
 


Manejando operadores bit a bit

Desarrollamos aquí algunos ejemplos de manejo de los operadores bit a bit.

El operador &
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=23 10111 $B="23" 110010110011 $B1="aZ" 11000011011010
$a&$b=4 100 $A&$B=02 110000110010 $A1&$B1=@R 10000001010010

Observa que el tratamiento y el resultado es distinto cuando los mismos valores numéricos se asignan como entero y como cadena.
Al asignarlos como cadena opera independientemente los valores binarios de los códigos ASCII de los caracteres.

El operador |
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=23 10111 $B="23" 110010110011 $B1="aZ" 11000011011010
$a|&b=31 11111 $A|$B=33 110011110011 $A1|$B1=s{ 11100111111011

Como puedes observar los enteros y las cadenas son tratados de forma idéntica a la del caso anterior.

El operador ^
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=23 10111 $B="23" 110010110011 $B1="aZ" 11000011011010
$a^b=27 11011 $A^$B= 000011000001 $A1^$B1=3) 01100110101001

El operador ^ se comporta de forma idéntica a los dos anteriores en lo relativo a enteros y cadenas.

El operador <<
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=2 10 $B=2 10 $B1=2 10
$a<<b=48 110000 $A<<$B=48 110000 $A1<<$B1=0  

Observa que el operador << trata las cadenas numéricas exactamente igual que su valor entero y devuelve el mismo resultado.
No tiene sentido con valores de $B no enteros y en el caso de que la cadena $A fuera no numérica devolvería siempre 0 ya que el valor numérico de una cadena alfabética siempre es cero.

El operador >>
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=2 10 $B=2 10 $B1=2 10
$a>>b=3 11 $A>>$B=3 11 $A1>>$B1=0  

Para este operador (>>) son aplicables los mismos comentarios hechos en el párrafo anterior.

El operador ~
$a=12 1100
~$a=-13 11111111111111111111111111110011


Sugerir a un/a amig@ Envíame tus comentarios
Anterior
Indice
Siguiente