我想将long
转换为int
。
如果long
> int.MaxValue
的值,我很高兴让它环绕。
什么是最好的方法?
只是做(int)myLongValue
。它会在unchecked
上下文中执行您想要的操作(丢弃MSB并使用LSB)(这是编译器的默认设置)。如果该值不适合OverflowException
,它会在checked
上下文中抛出int
:
int myIntValue = unchecked((int)myLongValue);
Convert.ToInt32(myValue);
虽然我不知道当它比int.MaxValue更大时它会做什么。
有时您实际上并不对实际值感兴趣,而是将其用作校验和/哈希码。在这种情况下,内置方法GetHashCode()
是一个不错的选择:
int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
安全和快速的方法是在演员之前使用Bit Masking ...
int MyInt = (int) ( MyLong & 0xFFFFFFFF )
位掩码(0xFFFFFFFF
)值将取决于Int的大小,因为Int大小取决于机器。
岂不
(int) Math.Min(Int32.MaxValue, longValue)
从数学角度讲,这是正确的方法吗?