domingo, 25 de enero de 2009

Manual de PHP 24. Operadores: Bit a Bit

Operadores de Bit

$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 sus caracteres y devuelve los caracteres ASCII correspondientes al resultado de esa comparación.


El operador &
NúmerosNúmeros como cadenasCadenas alfanuméricas
VariablesValores binariosVariablesValores binariosVariablesValores binarios
$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
En los casos de cadenas hemos diferenciado en rojo el valor binario correspondiente al primer carácter. Esos valores binarios corresponden a la forma binaria del código ASCII de cada uno de los caracteres



$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.


El operador |
NúmerosNúmeros como cadenasCadenas alfanuméricas
VariablesValores binariosVariablesValores binariosVariablesValores binarios
$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


$A ^ $B

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

El operador ^
NúmerosNúmeros como cadenasCadenas alfanuméricas
VariablesValores binariosVariablesValores binariosVariablesValores binarios
$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



$A << $B

Realiza la operación $A * 2$B.

Hace el cálculo añadiendo $B CEROS (binarios) a la derecha de la cadena binaria $A.

El operador <<
NúmerosNúmeros como cadenasCadenas alfanuméricas
VariablesValores binariosVariablesValores binariosVariablesValores binarios
$a=12 1100 $A="12" 110001110010 $A1="Rs" 10100101110011
$b=2 10 $B=2 10 $B1=2 10
$a< 110000 $A<<$B=48 110000 $A1<<$B1=0

El operador << multiplica el valor de la primera cadena por 2 elevado al valor de la segunda.

Al ser un operador matemático solo tiene sentido cuando ambas variables son números naturales. En las cadenas alfanuméricas extrae los números que pudiera haber al comienzo y, en caso de no haberlos, toma valor cero.


$A >> $B

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

El operador >>
NúmerosNúmeros como cadenasCadenas alfanuméricas
VariablesValores binariosVariablesValores binariosVariablesValores binarios
$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.

~ $A

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

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





Fuente:
Página del ifstic: http://www.isftic.mepsyd.es/formacion/enred/

No hay comentarios: