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

所以结果不会被转换为整数而是浮点数。

于 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 回答