Dale Weiler sostiene que la necesidad de aritmética entera con signo está sobrevalorada, ya que la mayoría de los enteros de un programa —índices de arreglos, contadores de bucles, tamaños— nunca representan valores negativos. El autor defiende el uso preferente de enteros sin signo y rebate los argumentos habituales en contra. Sobre la seguridad, explica que el supuesto riesgo de subdesbordamiento se evita con modismos sencillos como iniciar el contador en size - 1 y decrementar hasta que sea mayor o igual que size, aprovechando que el wrap sin signo está bien definido; la alternativa con signo obliga a conversiones narrowing o provoca desbordamiento con signo, que en C y C++ es comportamiento indefinido. Para calcular diferencias entre dos números, propone max(x,y) - min(x,y), mucho más robusto que abs(x-y) con signo. En el caso del cálculo del punto medio en algoritmos divide y vencerás, fórmulas como (low + high) / 2 pueden desbordar incluso con tipos de 64 bits, mientras que con sin signo el wrap ofrece soluciones eficientes. Weiler reconoce que los lenguajes con trampa de subdesbordamiento (Rust en Debug) necesitan primitivas específicas como Range, pero concluye que el sesgo hacia el signo es más inseguro y menos expresivo que admitir y enseñar la aritmética modular sin signo.
Por qué los enteros sin signo deberían ser la elección por defecto
Fuentes:
Almost Always Unsigned
