3

私はいくつかの Java コードを C# に変換していて、ちょっとした問題に遭遇しました。MSDN のすべてのドキュメントは、すべてのビット演算が演算対象の型を返すことを示唆しています。参照: http://msdn.microsoft.com/en-us/library/aa691307(v=vs.71).aspxおよびhttp://msdn.microsoft.com/en-us/library/aa691377(v=vs .71).aspxしかし、私が何をしても、私のインテリセンスは、「型 'long' を 'int' に暗黙的に変換することはできません」と言い続けます。次の行は問題のある行であり、私には、そこにあるすべてのリテラルは int に評価されるように見え、操作されるすべての型は int または uint のいずれかです。私は何が欠けていますか?ファイルで長い変数を宣言することさえしません。以下のすべての変数は int 型です。

int t1 = ((s13 << 96 - 66) | ((uint)s12 >> 66 - 64)) ^ ((s13 << 96 - 93) | ((uint)s12 >> 93 - 64));
4

1 に答える 1

3

uint を int で操作すると、結果は long になります。当然。

int t1 = (int)((((uint)s13 << 96 - 66) | ((uint)s12 >> 66 - 64)) ^ (((uint)s13 << 96 - 93) | ((uint)s12 >> 93 - 64)));

注: c# コンパイラはスマートで、定数を処理できます。so (uint)s | 1 は静的に判断できるため、uint です。

于 2012-10-27T03:40:13.533 に答える