[英]Multiplication issue with Visual Studio debugger for C#
如果我在C#调试器的监视窗口中输入174 * 256 * 256 * 256,结果是
-1375731712。 我认为它与256有关,但我很感激一点指导。
谢谢!!
不,与256无关。这只是乘法的结果大于最大可能的有符号32位整数,所以你得到了溢出。
试试这个:
174L * 256L * 256L * 256L
这些是64位整数文字。
它执行unchecked
溢出(因此溢出无错误)。 想象如下:Int32.MaxValue + 1 == Int32.MinValue,但有乘法。
这解释了如何在内存http://en.wikipedia.org/wiki/Two's_complement中表示int
尝试输入:
174 * 256 * 256 * 256f
所以结果不会被转换为整数,而是浮动。
您正面临整数溢出。 如果你想在没有限制的情况下使用大数字(当然除了可用内存),你可以使用System.Numerics.BigInteger
。 在你的特殊情况下, long
也可以(64位整数)
你正在溢出整数。 实际答案是2,919,235,584,但只有2,147,483,647可以表示为有符号整数。 考虑一个unsigned int(uint),一个long,一个ulong,或者如果它不够大。 对于监视窗口,您可能需要转换第一个参数或使用后缀,例如174L * 256L * 256L * 256L
这是一个简单的溢出。 尝试在观察窗口中输入:
(uint)(174 * 256 * 256 * 256)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.