Avatar ·

Operadores << e >> em Go: deslocamentos de bits para esquerda e direita

Olá a todos! Acabei de começar a estudar Go e me deparei com os operadores `<<` e `>>`. Na documentação diz que são operadores de deslocamento, mas não entendo muito bem como funcionam na prática.\n\nAqui está um exemplo de código que escrevi:\n\n```go\npackage main\n\nimport "fmt"\n\nfunc main() {\n x := 4\n y := x << 2\n z := x >> 1\n fmt.Println(y, z) // Saída: 16 2\n}\n```\n\nEu esperava que `x << 2` desse 8 (4 * 2), e `x >> 1` desse 2 (4 / 2). O resultado 16 e 2 me confundiu. Por que o deslocamento para esquerda em 2 resultou em multiplicação por 4, e não por 2? E o que esses operadores significam afinal?\n\nTambém vi o uso de `<<` no contexto de `1 << iota` ao definir constantes. Podem explicar como isso funciona? Tentei entender as operações de bits, mas me confundo com o sistema binário. Agradeço por uma explicação detalhada com