Operadores bit-a-bit em PHP

Operadores bit-a-bit em PHP (também conhecidos como operadores bitwise ou binários) trabalham em um nível de abstração bem mais baixo, diretamente com a representação binária do valor em questão. Eles podem ser utilizados para realizar comparações binárias, inversões de bits do operando, deslocar bits para a direita ou esquerda, e assim por diante.

A tabela abaixo mostra os operadores bit-a-bit disponíveis no PHP:

Exemplo Nome Resultado
$a & $b E Os bits que estão ativos tanto em $a quanto em $b são ativados.
$a | $b OU Os bits que estão ativos em $a ou em $b são ativados.
$a ^ $b XOR Os bits que estão ativos em $a ou em $b, mas não em ambos, são ativados.
~ $a NÃO Os bits que estão ativos em $a não são ativados, e vice-versa.
$a << $b Deslocamento à esquerda Desloca os bits de $a $b passos para a esquerda (cada passo significa "multiplica por dois")
$a >> $b Deslocamento à direita Desloca os bits de $a $b passos para a direita (cada passo significa "divide por dois")

Esta tabela pode ser encontrada no próprio manual do PHP.

Vamos ver alguns exemplos abaixo.

Operador Bit-a-Bit & (AND – E)

O operador bit-a-bit & (and ou e) compara dois valores utilizando sua representação binária e retorna um novo valor. Nesse caso, o interpretador do PHP vai comparar cada bit; quando os bits forem iguais a 1, 1 é retornado; quando ambos os valores forem 0, 0 é retornado; se os valores forem diferentes, 0 é também retornado.

Veja o exemplo abaixo:

<?php
// 00001010
$a = 10;
// 01101001
$b = 105;

$c = $a & $b;
#   01101001
# & 00001010
# = 00001000

// Exibe 8 Na tela
// 00001000
echo $c;
?>

Operador Bit-a-Bit | (OR – OU)

O operador bit-a-bit | (or / ou) comparara cada um dos bits do valor e retorna um novo valor. A comparação é feita da seguinte maneira:

  • Se qualquer um dos bits for igual a 1, 1 é retornado;
  • Se ambos os bits forem 0, 0 é retornado.

Veja o exemplo:

<?php
// 00001010
$a = 10;
// 01101001
$b = 105;

$c = $a | $b;
#   01101001
# & 00001010
# = 01101011

// Exibe 107 Na tela
// 01101011
echo $c;
?>

Operador Bit-a-Bit ^ (XOR)

O operador bit-a-bit ^ (xor) comparara cada um dos bits do valor e retorna um novo valor. A comparação é feita da seguinte maneira:

  • Se os bits forem diferentes, 1 é retornado;
  • Se os bits forem iguais, 0 é retornado.

Veja o exemplo:

<?php
// 00001010
$a = 10;
// 01101001
$b = 105;

$c = $a ^ $b;
#   01101001
# & 00001010
# = 01100011

// Exibe 99 Na tela
// 01100011
echo $c;
?>

Operador Bit-a-Bit ~ (Not ou Não)

O operador ~ (não) inverte a posição dos bits ativos para não ativo em um único valor. Veja um exemplo:

<?php
// 00000000000000000000000000001010
$a = 10;

// 11111111111111111111111111110101
$a = ~$a;

// Exibe -11 na tela
echo $a;
?>

Perceba no trecho de código acima que onde tínhamos 0, agora temos 1, e onde tínhamos 1, agora temos 0.

Operador Bit-a-Bit >> (right shift)

O operador bit-a-bit >> (right shift) desloca bits para a direita. Cada deslocamento para a direita, é o mesmo que dividir o valor por 2.

Veja no exemplo abaixo:

<?php
// 1010
$a = 10;

// Desloca 1 bit para a direita
$a = $a >> 1; // 101

// Exibe 5 na tela
echo $a;
?>

Operador Bit-a-Bit >> (left shift)

O operador bit-a-bit << (left shift) desloca bits para a esquerda. Cada deslocamento para a esquerda, é o mesmo que multiplicar o valor por 2.

Veja no exemplo abaixo:

<?php
// 1010
$a = 10;

// Desloca 1 bit para a esquerda
$a = $a << 1; // 10100

// Exibe 20 na tela
echo $a;
?>

Concluindo

Como você pode perceber, estou mostrando os valores binários para que você entenda o que realmente acontecer por baixo dos panos, porém, se você utilizar o recurso indicado nos trechos de código acima, não verá nenhum valor binário, mas sim, números decimais comuns.

Para que você possa ver a representação binária de um valor numérico em PHP utilize a função decbin.

Exemplo:

<?php
$a = 10;

// Exibe 1010 na tela
echo decbin($a);
?>

Aulas anteriores

Veja todas as aulas, e mais, na categoria Curso de PHP do Tutsup.