Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Setando bits
  2. Resetando bits
  3. Testando bits
  4. Invertendo bits
  5. Recuperando bits
  6. Setando bytes
  7. Resetando bytes
  8. Invertendo ordem de bytes
  9. Percorrendo bits

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
  1. 05/05/2026 - revisão 1 - Versão inicial: 'Setando', 'Resetando', 'Testando' e 'Invertendo bits'