3

C# デバッガーのウォッチ ウィンドウに 174 * 256 * 256 * 256 と入力すると、結果は
-1375731712 になります。256と関係があると思いますが、少しご指導いただければ幸いです。

ありがとう!!

4

6 に答える 6

4

いいえ、256とは関係ありません。これは、乗算が可能な最大の符号付き32ビット整数よりも大きいため、オーバーフローが発生したためです。

代わりにこれを試してください:

174L * 256L * 256L * 256L

これらは64ビット整数リテラルです。

于 2011-03-09T14:40:30.080 に答える
1

オーバーフローを実行しuncheckedます(したがって、エラーなしでオーバーフローします)。次のように考えてください:Int32.MaxValue + 1 == Int32.MinValueですが、乗算があります。

これは、intがメモリでどのように表されるかを説明しています http://en.wikipedia.org/wiki/Two's_complement

于 2011-03-09T14:41:01.160 に答える
0

これを入力してみてください:

174 * 256 * 256 * 256f

したがって、結果は整数にキャストされず、floatとしてキャストされます。

于 2011-03-09T14:40:46.963 に答える
0

整数のオーバーフローに直面しています。System.Numerics.BigInteger(もちろん使用可能なメモリのほかに)無制限に大きな数で作業したい場合は、を使用できます。あなたの特別な場合には、alongも行います(64ビット整数)

于 2011-03-09T14:40:50.207 に答える
0

整数がオーバーフローしています。実際の答えは2,919,235,584ですが、符号付き整数として表現できるのは最大2,147,483,647までです。unsigned int(uint)、long、ulong、またはそれが十分に大きくない場合を考えてみてください。ウォッチウィンドウの場合、おそらく最初の引数をキャストするか、接尾辞を使用する必要があります(例:174L * 256L * 256L * 256L)

于 2011-03-09T14:41:45.613 に答える
0

単純なオーバーフローです。ウォッチウィンドウにこれを入力してみてください。

(uint)(174 * 256 * 256 * 256)
于 2011-03-09T14:41:59.007 に答える