如果我在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
这是一个简单的溢出。尝试在您的监视窗口中输入以下内容:
(uint)(174 * 256 * 256 * 256)
尝试输入这个:
174 * 256 * 256 * 256f
所以结果不会被转换为整数,而是作为浮点数。
您面临整数溢出的问题。如果您想使用大数字而不受限制(除了可用内存外),则可以使用 System.Numerics.BigInteger
。在您的特殊情况下,long
(64 位整数)也可以胜任。
您的整数溢出了。真正的答案是2,919,235,584,但只有2,147,483,647可以表示为有符号整数。考虑使用无符号整数(uint)、长整型(long)、无符号长整型(ulong),或者如果这些还不够大的话。对于监视窗口,您可能需要将第一个参数强制转换或使用后缀,例如174L * 256L * 256L * 256L。