3

次のコードを取ります。

long longInteger = 42;
int normalInteger = 23;
object rem = longInteger % normalInteger;

remの余りがである場合longInteger / normalInteger、余りは常に小さいサイズの「int」である除数で囲まれるべきではありませんか?しかし、C#では、上記のコードは結果としてrem。になりlongます。

データを失うことなくに変換remしても安全ですか?int

int remainder = Convert.ToInt32(rem);
4

3 に答える 3

4

longaと anを取るモジュロ演算子のオーバーロードがないintため、は他のオペランドと一致するintように に変換されます。long

下位レベルで見ると、CPU にはモジュロを計算するための個別の命令はなく、除算演算の結果の 1 つにすぎません。演算の出力は、除算の結果とリマインダーです。どちらも同じサイズなので、除算の結果は でなければならないlongので、リマインダーもそうです。

リマインダーは除数よりも小さくなければならないためint、除数が から来る場合、安全に結果をキャストできますint

于 2011-02-18T01:23:18.897 に答える
1

2 つの整数に関係なく、結果は「normalInteger」より低くなければなりません。したがって、結果の "rem" は int 型の制限に制約されます。したがって、データを失うことなく rem を int に安全に変換できます。

于 2011-02-18T01:01:05.720 に答える
0

はい、問題はありません。convert 関数は結果を丸めます。次に、それがあなたにとって役立つかどうかを知る必要があります。

于 2011-02-18T00:58:53.273 に答える