Como sabemos, el desbordamiento de enteros con signo es un comportamiento indefinido . Pero hay algo interesante en la cstdint
documentación de C ++ 11 :
tipo entero con signo con un ancho de exactamente 8, 16, 32 y 64 bits respectivamente sin bits de relleno y usando el complemento a 2 para valores negativos (proporcionado solo si la implementación admite directamente el tipo)
Y aquí es mi pregunta: ya que la norma dice explícitamente que para int8_t
, int16_t
, int32_t
y int64_t
los números negativos son complemento a 2, sigue siendo desbordamiento de estos tipos un comportamiento indefinido?
Editar Revisé los estándares C ++ 11 y C11 y esto es lo que encontré:
C ++ 11, §18.4.1:
El encabezado define todas las funciones, tipos y macros al igual que 7.20 en el estándar C.
C11, §7.20.1.1:
El nombre typedef
intN_t
designa un tipo entero con signo con ancho N, sin bits de relleno y una representación en complemento a dos. Por lo tanto,int8_t
denota un tipo de entero con signo con un ancho de exactamente 8 bits.