Por que se comporta o meu .net do Int64 como se fossem Int32 de?
-
06-07-2019 - |
Pergunta
Estou testemunhando um comportamento estranho em um programa de .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 que meus comporta de Int64 como se fossem Int32 de, embora Int64.MaxValue parece confirmar que eles estão usando 64 bits?
Se for relevante, estou usando um sistema operacional de 32 bits, e a plataforma de destino é definido como "Qualquer CPU"
Solução
Seu RHS está apenas usando valores Int32
, então toda a operação é realizada utilizando Int32
aritmética, então o Int32
Resultado é promovido para um longo.
Alterar-lo para o seguinte:
Int64 a = 256*256*256*128L;
e tudo ficará bem.
Outras dicas
Use:
Int64 a = 256L*256L*256L*128L;
o meio L sufixo Int64 literal, nenhum sufixo significa Int32.
O seu escreveu:
Int64 a = 256*256*256*128
meios:
Int64 a = (Int32)256*(Int32)256*(Int32)256*(Int32)128;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow