永远增加,您会得到-2147483648?
|
出于一个我不想解释的聪明而复杂的原因(因为它涉及到以极其丑陋和hacky的方式创建计时器),我编写了一些如下的C#代码:
int i = 0;
while (i >= 0) i++; //Should increment forever
Console.Write(i);
我希望程序能够永久挂起或崩溃,但是,令我惊讶的是,在等待大约20秒左右后,我得到了以下输出:
-2147483648
嗯,编程教会了我很多东西,但是我仍然无法理解为什么不断增加数字会导致数字最终变为负数……这是怎么回事?
没有找到相关结果
已邀请:
9 个回复
脾萌
可以同时容纳正数和负数,因此必须以某种方式对数字的符号进行编码。这是用第一位完成的。如果第一位为1,则数字为负。 以下是用十六进制和十进制数字排列在整数行上的int值:
从该图表中可以看出,表示最小可能值的位是将最大可能值加1而忽略符号位的解释所得到的值。当以这种方式添加签名数字时,它称为“整数溢出”。可以使用C#中的
和
语句配置是否允许整数溢出或将其视为错误。默认值是未选中,这就是为什么没有错误发生,但是您在程序中得到了那个疯狂的小数字的原因。 此表示称为2 \'s Complement。
逝媳蘑贩茄
讹巳漓把备
碉罕城爸
是有符号整数。一旦超过最大值,它将从最小值(大负数)开始,并朝着0前进。 用
再试一次,看看有什么不同。
蓄荣糖些
并解释结果
纤洞需匪
授巨
队辅坟阮阶
辽躺