Domanda

Sto assistendo a uno strano comportamento in un programma .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.

Perché il mio Int64 si comporta come se fosse Int32, anche se Int64.MaxValue sembra confermare che stanno usando 64 bit?

Se è pertinente, sto usando un sistema operativo a 32 bit e la piattaforma di destinazione è impostata su " Qualsiasi CPU "

È stato utile?

Soluzione

Il tuo RHS utilizza solo i valori Int32 , quindi l'intera operazione viene eseguita utilizzando l'aritmetica Int32 , quindi il risultato Int32 viene promosso a lungo.

Modificalo in questo:

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

e tutto andrà bene.

Altri suggerimenti

Usa:

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

il suffisso L significa Int64 letterale, nessun suffisso significa Int32.

Cosa hai scritto:

Int64 a = 256*256*256*128

significa:

Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top