为什么在 2 的补码和有符号幅度中取反整数会导致溢出?

  • 本文关键字:整数 溢出 补码 符号 c
  • 更新时间 :
  • 英文 :


我不太明白,如果有人能提供例子来帮助我更好地理解。我将不胜感激。

在使用2的补码和32位int的系统上,它可以保存的值范围是-2147483648到2147483647。

如果你要否定最小的int,即-2147483648,结果将是2147483648,这超出了范围。

符号和幅度系统不能以这种方式溢出,因为1位被单独保留为符号位,而其余的位(假设没有填充)是值。

符号大小格式无法获得溢出。取负数只是将符号颠倒,并保持大小不变。

在2的补码中,如果你试图取最大的负值,你会得到一个溢出,因为负值总是比正值多1个。例如,在8位中,取值范围是-128到127。因为没有128,如果你试图取-128的负值,你会得到一个溢出。

因为2的补数没有负零——它们只有一个零,所以负数的数量大于正数的数量。

如果你取最小负数,你将得到一个不能被表示为相同长度的正数的数。

最新更新