我可以将long转换为int吗?

问题描述 投票:129回答:5

我想将long转换为int

如果long> int.MaxValue的值,我很高兴让它环绕。

什么是最好的方法?

c# types int type-conversion long-integer
5个回答
204
投票

只是做(int)myLongValue。它会在unchecked上下文中执行您想要的操作(丢弃MSB并使用LSB)(这是编译器的默认设置)。如果该值不适合OverflowException,它会在checked上下文中抛出int

int myIntValue = unchecked((int)myLongValue);

31
投票
Convert.ToInt32(myValue);

虽然我不知道当它比int.MaxValue更大时它会做什么。


15
投票

有时您实际上并不对实际值感兴趣,而是将其用作校验和/哈希码。在这种情况下,内置方法GetHashCode()是一个不错的选择:

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();

7
投票

安全和快速的方法是在演员之前使用Bit Masking ...

int MyInt = (int) ( MyLong & 0xFFFFFFFF )

位掩码(0xFFFFFFFF)值将取决于Int的大小,因为Int大小取决于机器。


0
投票

岂不

(int) Math.Min(Int32.MaxValue, longValue)

从数学角度讲,这是正确的方法吗?

© www.soinside.com 2019 - 2024. All rights reserved.