Dúvida

5 respostas
elvishr

Galera, alguem saberia me explicar como funciona os operadores & e | usados com inteiros?

exemplo:

x = 6 | 3;
y = 2 & 5;

eles não funcionam somente com booleanos?

5 Respostas

marciolx

Use a representação em binário do número e utilize 1 como se fosse true e 0 como false, assim

1 & 1 = 1
1 & 0 = 0
1 | 1 = 1
1 | 0 = 1
0 | 0 = 0
1 ^ 1 = 0
0 ^ 0 = 0
1 ^ 0 = 1

Assim:

6 | 3 = 7

0000 0000 0000 0000 0000 0000 0000 0110
0000 0000 0000 0000 0000 0000 0000 0011
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0111

2 & 5 = 0

0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0101
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000

E eles não funcionam só com booleanos, os operadores short-circuit && e || é que servem apenas para booleanos.

Shelson

eu nao entendi 2 & 5 = 0 . … :frowning: vc pode me explicar …

marciolx

ok, 2 (int) em binário:

0000 0000 0000 0000 0000 0000 0000 0010

5 (int) em binário:

0000 0000 0000 0000 0000 0000 0000 0101

A representação binária de um número decimal é feita assim:
da direita para a esquerda, cada número 0 ou 1 deve ser multiplicado por potências de 2 desta forma:

Ex.: com os bits da direita do número 5:

0             1                0               1

0*2^3 +  1*2^2  +     0*2^1  +   1*2^0  = 5

com o operador & comparamos bit a bit dos dois operandos e seguimos a regra:

1 & 1 = 1 (o memos que verdadeiro E verdadeiro = verdadeiro)
falso para todos os outros casos

Colocando 2 em cima do 5:
0000 0000 0000 0000 0000 0000 0000 0010
0000 0000 0000 0000 0000 0000 0000 0101

vemos que não há nenhuma coluna onde os bits dos dois números são 1, portanto o operador & vai retornar 0 para todas as colunas.

Shelson

Valeu mesmo !

Uma vez eu tinha aprendido isso kuando fazia uma aulinha de eletrônica
no colegial ! (Há uns 9 anos ).
Não ia lembrar isso mesmo …

:o

elvishr

blza, cara, agora ficou clareza…

Valeu…

:smiley:

Criado 2 de dezembro de 2003
Ultima resposta 3 de dez. de 2003
Respostas 5
Participantes 3