c++ - ¿Por qué el tipo entero int64_t no tiene este valor legal?
c++11 numeric-limits (2)
Ben ya ha explicado la razón, aquí hay otras dos posibles soluciones.
Prueba esto
int64_t a = INT64_MIN;
o esto
int64_t a = std::numeric_limits<int64_t>::min();
Esta pregunta ya tiene una respuesta aquí:
Estoy tratando de escribir un caso de prueba para un caso de esquina.
Para la entrada de tipo
int64_t
, la siguiente línea no se compilará:
int64_t a = -9223372036854775808LL;
El error / advertencia es:
error: integer constant is so large that it is unsigned [-Werror]
Pensé que el número estaba fuera de rango, así que intenté:
std::cout << std::numeric_limits<int64_t>::min() << std::endl;
Produce exactamente el mismo número !!! Así que la constante está dentro del rango.
¿Cómo puedo solucionar este error?
Usted puede escribir
int64_t a = -1 - 9223372036854775807LL;
El problema es que el
-
no es parte del literal, es un menos unario.
Así que el compilador primero ve
9223372036854775808LL
(fuera de rango para
int64_t
firmado) y luego encuentra el negativo de esto.
Al aplicar el signo menos binario, podemos usar dos literales que están dentro del rango.