Posso converter longo para int?
-
21-08-2019 - |
Pergunta
Eu quero converter long
para int
.
Se o valor de long
> int.MaxValue
, Fico feliz em deixá -lo envolver.
Qual é a melhor maneira?
Solução
Apenas faça (int)myLongValue
. Fará exatamente o que você deseja (descartando MSBs e tomando LSBs) em unchecked
contexto (que é o padrão do compilador). Vai jogar OverflowException
dentro checked
contexto se o valor não se encaixa em um int
:
int myIntValue = unchecked((int)myLongValue);
Outras dicas
Convert.ToInt32(myValue);
Embora eu não saiba o que fará quando for maior que o Int.MaxValue.
Às vezes você não está realmente interessado no valor real, mas em seu uso como soma de verificação/hashcode. Nesse caso, o método interno GetHashCode()
é uma boa escolha:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
A maneira mais segura e rápida é usar o mascaramento de bits antes do elenco ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
A máscara de bits ( 0xFFFFFFFF
) O valor dependerá do tamanho do int, porque o tamanho int depende da máquina.
Não
(int) Math.Min(Int32.MaxValue, longValue)
Seja o caminho correto, matematicamente falando?