166

に変換longしたいint

long>の値の場合は、int.MaxValueラップアラウンドさせていただきます。

最善の方法は何ですか?

4

8 に答える 8

239

するだけです(int)myLongValueuncheckedコンテキスト (コンパイラの既定値) で、必要なこと (MSB を破棄して LSB を取得) を正確に実行します。値が に収まらない場合は、コンテキストでスローOverflowExceptionされます:checkedint

int myIntValue = unchecked((int)myLongValue);
于 2009-05-13T16:17:05.323 に答える
43
Convert.ToInt32(myValue);

int.MaxValue より大きい場合はどうなるかわかりませんが。

于 2009-05-13T16:17:52.327 に答える
17

実際の値ではなく、checksum/hashcodeとしての使用法に興味がある場合があります。この場合、組み込みメソッドGetHashCode()が適切な選択です。

int checkSumAsInt32 = checkSumAsIn64.GetHashCode();
于 2012-11-19T11:18:23.140 に答える
12

安全で最速の方法は、キャストする前にビット マスキングを使用することです...

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

Int のサイズはマシンに依存するため、ビット マスク ( 0xFFFFFFFF) の値は Int のサイズに依存します。

于 2014-08-21T05:35:46.563 に答える
3

値が整数の範囲外の場合、次のソリューションは int.MinValue/int.MaxValue に切り捨てます。

myLong < int.MinValue ? int.MinValue : (myLong > int.MaxValue ? int.MaxValue : (int)myLong)
于 2019-09-19T12:28:45.833 に答える