Pregunta salida extraña sin encasillar


Estaba intentando ejecutar este código a través del compilador gcc:

#include <stdio.h>
int main()
{
    unsigned long long int x;
    x = 75000 * 75000;
    printf ("%llu\n", x);
    return 0;
}

Pero dio salida incorrecta.

Luego intenté esto:

#include <stdio.h>
int main()
{
    unsigned long long int x;
    x = (unsigned long long)75000 * (unsigned long long)75000;
    printf ("%llu\n", x);
    return 0;
}

¡Y dio salida correcta!

¿Por qué esto es tan?


5
2018-06-17 08:07


origen


Respuestas:


La expresion 75000 * 75000 Es la multiplicación de dos constantes enteras. El resultado de esta expresión también es un número entero y puede desbordarse. El resultado se asigna a un sin signo de larga duración, pero ya se ha desbordado, por lo que el resultado es incorrecto.

Para escribir constantes largas sin firmar use la ULL sufijo.

x = 75000ULL * 75000ULL;

Ahora la multiplicación no se desbordará.


9
2018-06-17 08:09