GoPrincipiante20 oct 2025
¡El Módulo Rebelde de Go! No siempre es como esperas... 🎩
snippet.go
package main
import "fmt"
func main() {
fmt.Println("-5 / 2 =", -5 / 2)
fmt.Println("-5 % 2 =", -5 % 2)
fmt.Println("5 / -2 =", 5 / -2)
fmt.Println("5 % -2 =", 5 % -2)
fmt.Println("-5 / -2 =", -5 / -2)
fmt.Println("-5 % -2 =", -5 % -2)
}¿Qué crees que imprime?
✅ Salida Esperada
-5 / 2 = -2
-5 % 2 = 1 (o al menos, esperar algo consistente o positivo)
5 / -2 = -2
5 % -2 = -1 (o al menos, esperar algo consistente o positivo)
-5 / -2 = 2
-5 % -2 = 1 (o al menos, esperar algo consistente o positivo)⚠️ Salida Real
-5 / 2 = -2
-5 % 2 = -1
5 / -2 = -2
5 % -2 = 1
-5 / -2 = 2
-5 % -2 = -1¿Por qué pasa esto?
¡Agarraos los sombreros, matemáticos! 🎩 En Go, cuando hablamos de divisiones y restos con números negativos, las cosas se ponen... interesantes. No es que Go esté borracho, es que tiene sus propias **reglas de etiqueta numérica**.
La norma de oro en Go es:
- El operador `/` (división) siempre **trunca hacia cero**. Es decir, `-2.5` se convierte en `-2`, no `-3`.
- El operador `%` (módulo) siempre devuelve un resto con el **mismo signo que el dividendo**. ¡Sí, el primero de la pareja! 🤯
Así que, cuando ves `-5 % 2`, no esperes un `1`. Como el dividendo (`-5`) es negativo, el resto será negativo: `-1`. Es como un GPS numérico que siempre te lleva al punto más cercano sin pasarse de cero, ¡manteniendo la dirección original! Esto es diferente a cómo otros lenguajes (como Python) manejan el módulo. ¡Cada lenguaje es un mundo!
Conceptos relacionados
arithmeticoperatorsspecification