Pregunta

Soy testigo de un comportamiento extraño en un programa .net:

Console.WriteLine(Int64.MaxValue.ToString());
// displays 9223372036854775807, which is 2^63-1, as expected

Int64 a = 256*256*256*127; // ok

Int64 a = 256*256*256*128; // compile time error : 
//"The operation overflows at compile time in checked mode"
// If i do this at runtime, I get some negative values, so the overflow indeed happens.

¿Por qué mis Int64 se comportan como si fueran Int32, aunque Int64.MaxValue parece confirmar que están usando 64 bits?

Si es relevante, estoy usando un sistema operativo de 32 bits, y la plataforma de destino está configurada en "Cualquier CPU"

¿Fue útil?

Solución

Su RHS solo utiliza valores Int32 , por lo que toda la operación se realiza utilizando la aritmética Int32 , luego el resultado Int32 se promociona a largo.

Cámbielo a esto:

Int64 a = 256*256*256*128L;

y todo estará bien.

Otros consejos

Uso:

Int64 a = 256L*256L*256L*128L;

el sufijo L significa Int64 literal, sin sufijo significa Int32.

Lo que escribiste:

Int64 a = 256*256*256*128

significa:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top