Avatar ·

Operadores << y >> en Go: desplazamientos de bits a la izquierda y derecha

¡Hola a todos! Acabo de empezar a aprender Go y me encontré con los operadores `<<` y `>>`. En la documentación dice que son operadores de desplazamiento, pero no entiendo del todo cómo funcionan en la práctica.\n\nAquí hay un ejemplo de código que escribí:\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) // Salida: 16 2\n}\n```\n\nEsperaba que `x << 2` diera 8 (4 * 2), y `x >> 1` diera 2 (4 / 2). El resultado 16 y 2 me confundió. ¿Por qué el desplazamiento a la izquierda de 2 dio una multiplicación por 4 y no por 2? ¿Y qué significan realmente estos operadores?\n\nTambién he visto el uso de `<<` en el contexto de `1 << iota` al definir constantes. ¿Pueden explicar cómo funciona esto? Intenté entender las operaciones de bits, pero me confundo con el sistema binario. Agradecería una explicación detallada con ejemplos.\n