如果我在 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
所以结果不会被转换为整数而是浮点数。
您正面临整数溢出。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)