2017-02-28 955 views
0

我知道要得到一个整数的二进制补码,我们首先翻转这些比特并添加一个,但我很难计算出Tmax和Tmin?二进制补码的Tmax和Tmin

在一个使用两个赞美符号整数的8位机器中,我将如何找到它可以容纳的最大和最小整数值?

would tmax be = 01111111?和tmin = 11111111

+0

[为什么有符号字节的范围是从-128到127(2的补码)而不是从-127到127?](http://stackoverflow.com/q/11433789/995714),[signed two's complement算术](http://stackoverflow.com/q/4941132/995714),[为什么是无符号n位整数2^n-1而不是2^n]的最大值(http://stackoverflow.com/q/5771520/995714) –

回答

2

你就近了。

具有n比特的带符号整数的最小值通过使最显著位1发现和所有其它的0

这样做的值为-2 ^(N-1)。

具有n个比特的带符号整数的最大值是通过使最显著位0找到和所有其它的1

的这个值是2 ^(N-1)-1。

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

阅读关于why this works维基百科。

+0

谢谢。我现在明白了。 – maxcc

0

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

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

  • 有1代表符号位,暗示负面;
  • 有最显著位为1,这意味着2 宽度1(128,在你的例子)...

结合这点来重新解释该值作为-128似乎是有道理的。