C# デバッガーのウォッチ ウィンドウに 174 * 256 * 256 * 256 と入力すると、結果は
-1375731712 になります。256と関係があると思いますが、少しご指導いただければ幸いです。
ありがとう!!
C# デバッガーのウォッチ ウィンドウに 174 * 256 * 256 * 256 と入力すると、結果は
-1375731712 になります。256と関係があると思いますが、少しご指導いただければ幸いです。
ありがとう!!
いいえ、256とは関係ありません。これは、乗算が可能な最大の符号付き32ビット整数よりも大きいため、オーバーフローが発生したためです。
代わりにこれを試してください:
174L * 256L * 256L * 256L
これらは64ビット整数リテラルです。
オーバーフローを実行しunchecked
ます(したがって、エラーなしでオーバーフローします)。次のように考えてください:Int32.MaxValue + 1 == Int32.MinValueですが、乗算があります。
これは、intがメモリでどのように表されるかを説明しています http://en.wikipedia.org/wiki/Two's_complement
これを入力してみてください:
174 * 256 * 256 * 256f
したがって、結果は整数にキャストされず、floatとしてキャストされます。
整数のオーバーフローに直面しています。System.Numerics.BigInteger
(もちろん使用可能なメモリのほかに)無制限に大きな数で作業したい場合は、を使用できます。あなたの特別な場合には、along
も行います(64ビット整数)
整数がオーバーフローしています。実際の答えは2,919,235,584ですが、符号付き整数として表現できるのは最大2,147,483,647までです。unsigned int(uint)、long、ulong、またはそれが十分に大きくない場合を考えてみてください。ウォッチウィンドウの場合、おそらく最初の引数をキャストするか、接尾辞を使用する必要があります(例:174L * 256L * 256L * 256L)
単純なオーバーフローです。ウォッチウィンドウにこれを入力してみてください。
(uint)(174 * 256 * 256 * 256)