Objetivos
Manipulando bits e bytes
A manipulação em baixo nível de bits e bytes é comum em aplicações como: editores hexadecimais,
assemblers, disassemblers, interpretadores de linguagens bytecode, ferramentas debuggers,
emuladores e outros.
Neste tópico, vamos aprender o básico sobre a manipulação de bits como: resetar bits, setar bits,
inverter bits e deslocar bits. Isso será feito utilizando os operadores bitwise vistos em
GO: Básico > Operadores > Bitwise.
O set de um ou mais bits é feito utilizando o operador (|). Uma máscara é utilizada para informar
quais bits devem ser mantidos(0) e quais devem ser setados(1).
Tabela:
1 | 1 = 1
1 | 0 = 1
0 | 0 = 0
Sintaxe:
nome_variavel | máscara
Assim, ao aplicar o operador acima temos apenas os bits necessários setados em suas posições:
Exemplo 1
package main
import "fmt"
func main() {
variavel := 0x00
resultado := variavel | 0b00011000
fmt.Printf("%02x", resultado)
}
Saída
18
O reset de um ou mais bits é feito utilizando o operador (&). Uma máscara é utilizada
para informar quais bits devem ser mantidos(1) e quais devem ser resetados(0).
Tabela:
1 & 1 = 1
1 & 0 = 0
0 & 0 = 0
Sintaxe:
nome_variavel & máscara
Assim, ao aplicar o operador acima temos apenas os bits necessários resetados em suas posições:
Exemplo 2
package main
import "fmt"
func main() {
variavel := 0xff
resultado := variavel & 0b00011000 //0x18
fmt.Printf("%x", resultado) //0x18
}
Saída
18
O operador (&) também pode ser utilizado indiretamente para testar bits. Modificando o exemplo
acima, podemos adicionar o comando
if ou
switch para verificar o valor dos bits
testados:
Exemplo 3: if
package main
import "fmt"
func main() {
variavel := 0xff
resultado := variavel & 0b00011000
fmt.Printf("%x\n", resultado)
if resultado == 0x18 {
fmt.Printf("ok")
}else{
fmt.Printf("nok")
}
}
Saída
ok
Exemplo 4: switch
package main
import "fmt"
func main() {
variavel := 0xff
resultado := variavel & 0b00011000
fmt.Printf("%x\n", resultado)
switch(resultado){
case 0x00: fmt.Printf("0");
case 0x10: fmt.Printf("1");
case 0x20: fmt.Printf("2");
case 0x18: fmt.Printf("3");
}
}
Saída
18
3
A inversão de bits é feita utilizando o operador (&^) que utiliza uma máscara de bits.
Essa máscara deve definir quais bits devem ser invertidos(1) e mantidos(0).
Sintaxe:
nome_variavel &^ máscara
Tabela:
1 ^ 1 = 0
1 ^ 0 = 1
0 ^ 0 = 0
Exemplo 5:
package main
import "fmt"
func main() {
variavel := 0xff
resultado := variavel &^ 0b00011000 //0x18
fmt.Printf("%x", resultado) //0xe7 %11100111
}
Saída
e7
Histórico de atualizações
- 05/05/2026 - revisão 1 - Versão inicial: 'Setando', 'Resetando', 'Testando' e 'Invertendo bits'
Os cursos oferecidos nesta página são cursos fornecidos por parceiros. Ao comprar um curso clicando
em seu banner, você está ajudando a manter o projeto TutorialDev vivo. Os sites dos cursos parceiros utilizam cookies.