& (E bit a bit)
resultado = a & b
Enquanto o && trabalha com verdadeiro/falso, o & trabalha bit por bit dentro dos números. Ele olha cada par de bits e só devolve 1 quando os dois são 1. Isso é ótimo pra isolar (mascarar) bits específicos de um valor — por exemplo, ler só os 4 bits de baixo de uma porta.
Sintaxe
resultado = a & b;
Parâmetros
- a, b: os dois valores inteiros (
int,byte,long, etc.) cujos bits serão comparados.
Retorno
Um inteiro em que cada bit vale 1 apenas quando o bit correspondente de a e de b também vale 1.
Exemplo
void setup() {
Serial.begin(9600);
byte valor = 0b10110101; // 181
byte mascara = 0b00001111;
// guarda apenas os 4 bits de baixo
byte baixos = valor & mascara; // 0b0101 = 5
Serial.println(baixos);
}
void loop() {}
Notas e cuidados
- Não confunda
&(bit a bit) com&&(E lógico): trocar um pelo outro compila mas dá resultado errado. - É a operação clássica pra testar se um bit está ligado:
if (valor & 0b00000100) { ... }. - Funciona bit a bit em todos os bits do tipo, então
bytetem 8 bits eintno Uno tem 16.