[Conceito/Desafio] - Números Binário e Operadores Bitwise
Published: 2022-07-29 00:46:07

> Conteúdo original [nesse tweet](https://twitter.com/zanfranceschi/status/1552815991322595329)

---

Ei dev,

Pra você que é uma pessoa encalhada e que nunca dá match com ninguém: tenho a fórmula pra que você saia dessa e encalhe sem perder muito tempo, com mais eficiência! Ah, e de quebra você sai daqui com uma intuição sobre o que são operações bitwise.

cc @sseraphini

↓

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tvdwn81idwbzqya2mbl5.png)

---

Disclaimer: não espere nada formal/completo sobre operações bit a bit (ou operações bitwise) nessa thread. O @thewizardlucas tem um post bem detalhado e muito bom sobre o assunto que pode te ajudar a entender melhor sobre esse assunto ─ recomendo demais!

https://twitter.com/thewizardlucas/status/1551273778398826497

---

Ser uma pessoa encalhada ─ que não dá certo com ninguém ─ é ruim, mas se pelo menos a gente já alinhasse as expectativas de ambas partes logo de cara pra partir pra outra ou pra sofrência com mais rapidez seria melhor, diz aí.

---

Ser explícito sobre nossas expectativas torna tudo mais fácil.

Imagine se pudéssemos representar nossas expectativas sobre as pessoas como nessa imagem. O que esperamos de uma pessoa deixaríamos marcado, o restante deixaríamos desmarcado mesmo.

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/w2acgdp4kuqc2pipdstq.png)

---

(Uma pessoa inteligente e safada já é bom, vai? 😉)

É, como você imaginava precisamos transformar isso em números binários. O que está marcado vira "1" e atributos desmarcados viram "0". Suave, né?

As expectativas do exemplo virariam então 0 1 1 0 0.

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ef9u5j42og8vsepykt16.png)
 
---

Bom, vamos criar algumas personas (ah, o contato com a galera de UX valeu a pena... escrevi "persona" 😎):

O 1 representa que a pessoa possui tal qualidade, enquanto que 0 diz o oposto.

Deu pra captar a mensagem?

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zy32u789csrao4tfsqrm.png)

---

Conforme falamos sobre alinhamento de expectativas, vamos entender como podemos fazer isso. A gente literalmente alinha os bits e, bit a bit ─ que é tradução de bitwise ─, aplica a operação desejada que nesse caso é AND (representada comumente pelo simbolo "&").

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/64w4basxlvht30r11t8c.png)

---

AND é apenas uma das operações bitwise. Existem AND, OR, XOR, NOT, etc. Não vou passar por todas porque uma vez que entendeu uma ou duas, o resto fica mais fácil.

A TABELA DA VERDADE pra AND é a seguinte:

0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1

https://thegeekstuff.com/2012/10/bitwise-operators/

---

Agora, faz um exercício: pegue a sua expectativa (0 1 1 0 0) e aplique AND contra todas as personas. A imagem usa o Jam como exemplo. Faça isso com todas as personas ─ uma a uma ─ e responda:

QUAL RESULTADO É IGUAL A SUA EXPECTATIVA?

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rvmf5sl4bqh4df7qm6zo.png)

---

Se você entendeu que a Karina é a pessoa certa, você acertou! Ela tem mais do que você espera, mas aplicando AND a gente sabe que ela cumpre com nossas expectativas! Fez sentido?

Ai, ai, ai, Karina...

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmiatlxxhqj5o4tr5rr1.png)

---

Se ainda ficou meio nublado, inventa umas contas com AND e vai praticando. Lembre-se da tabela da verdade pra isso. Uma hora esse conceito vai dar um clique na sua cabeça e tudo vai fazer sentido. Confia!

---

Vamos explorar o OR agora. O OR, pro nosso contexto, é bom pra CRIAR essas listas. Você escolhe os atributos individualmente e aplica um OR em todos eles.

A tabela da verdade de OR (símbolo "|") é:
1 | 1 = 1
0 | 0 = 0
1 | 0 = 1
0 | 1 = 1

Tranquilo?

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ltx9d7m9m7ka1qr38gut.png)

---

Deixa eu dar uma visão um pouco diferente desse rolê:

- Estamos usando apenas UM número pra armazenar uma lista de atributos e cada atributo pode possuir apenas um "1" pra que esses casos deem certo.

- Os valores dos números em si não fazem tanta diferença ─ a forma é que faz.

---

Um exemplo mais prático pra gente de TI seriam as permissões de acesso e perfis de usuário.

Você poderia representar uma série de permissões (admin, super user, can edit, can read, guest, etc) com apenas um número! Poderia ser convertido para decimal pra ficar menor visualmente.

![Image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vss8nezbpsud344xuwev.png)

---

Bem, é isso... a thread ficou longa e propositalmente incompleta.

O objetivo aqui foi tentar apenas te deixar com uma intuição sobre esse tipo de uso de números binários e operadores bitwise.

Ah, e claro, pra você ser mais eficiente nos dates :)

---

Obrigado demais se leu até aqui!

Agora, se você for uma pessoa da hora mesmo comenta aqui aplicando o operador OR nesses atributos sobre essa thread:

Divertida:
0001

Informativa:
0010

Meio boba:
0100

Me daria um abraço:
1000

Espero que tenha gostado ❤️