两个补码的Tmax和Tmin

时间:2017-02-28 05:29:20

标签: c

我理解得到一个整数的两个补码,我们首先翻转这些位并加一个,但是我很难搞清楚Tmax和Tmin吗?

在使用两个对有符号整数的补码的8位机器中,如何找到它可以容纳的最大和最小整数值?

将tmax = 01111111?和tmin = 11111111

2 个答案:

答案 0 :(得分:2)

你很亲密。

通过使最高位1和所有其他位0来找到具有n位的有符号整数的最小值。

这个值是-2 ^(n-1)。

通过使最高位0和所有其他位1来找到具有n位的有符号整数的最大值。

这个值是2 ^(n-1)-1。

对于8位,范围是-128 ... 127,即10000000 ... 01111111

在维基百科上阅读why this works

答案 1 :(得分:0)

由于溢出会导致负零,使用二进制补码表示的最小有符号整数的二进制表示通常是符号的一位,后跟所有零位。

如果将无符号类型的值分为两组,一组为负组,另一组为正组,那么您最终会得到两个零(负零和正零)。这似乎很浪费,所以很多人决定给它一个价值。它应该有什么价值?嗯,它:

  • 的符号位为1,表示为负;
  • 最高有效位为1,暗示2 width-1 (在您的示例中为128)......

将这些点组合起来重新解释该值为-128似乎是有意义的。