Os operadores basicamente são esses:
| OR
& AND
^ XOR
~ NOT
Os operadores bit a bit fazem a mesma coisa que os seus correspondentes na programação normal a única diferença que você tem que entender é que eles operam bit a bit e não o número que você passa, exemplo:
7 | 8 = 15
Não faz sentido nenhum né? Mas é o que te falei, ele compara bit a bit e não o número que você está vendo, na verdade ele comparou:
0111 | 1000 = 1111
Comparando bit a bit dessa forma:
0 | 1 = 1
1 | 0 = 1
1 | 0 = 1
1 | 0 = 1
Deu pra perceber? Pra fazer sentido você precisa converter para binário e ver cada bit pra ver como ele comparou.
Ele é a mesma coisa que o &&
, só retorna true
se todos os comparados forem true
, só que ele compara os bits do número que você passa e não o número. Basicamente ele compara os bits do integer e retorna se as comparações foram true
ou false
Exemplo
4 & 6 = 4
Por que? Veja a representação deles em binário:
4 -> 100 (em binário)
6 -> 110
Então ele compara bit a bit (nao importa se comparar o 4
ou o 6
antes, a ordem dos fatores nao altera o resultado)
1 AND 1 = 1
1 AND 0 = 0
0 AND 0 = 0
Repare que o binário gerado na comparação foi 100
(em binário) que coincidentemente é 4
(em inteiro)
Outro exemplo:
6 & 9 = 0
Por que? Veja a representação deles em binário:
6 -> 110
9 -> 1001
Então comparando bit a bit, Onde tem espaço em branco colocamos 0
:
0 AND 1 = 0
1 AND 0 = 0
1 AND 0 = 0
0 AND 1 = 0
O binário gerado foi 0000
e esse número em decimal naturalmente é 0
Espero que tenha entendido
Ele faz a mesma coisa que o XOR
na programação normal, só retorna true
se apenas um dos bits comparados forem true.
Tabela verdade
A | B | Resultado |
---|---|---|
1 | 0 | 1 |
0 | 0 | 0 |
1 | 1 | 0 |