【发布时间】:2017-02-28 05:29:20
【问题描述】:
我知道要获得整数的二进制补码,我们首先翻转位并添加一个,但我很难计算出 Tmax 和 Tmin?
在使用二进制补码的有符号整数的 8 位机器中,我如何找到它可以容纳的最大和最小整数值?
tmax 会是 =01111111 吗?和 tmin =11111111?
【问题讨论】:
标签: c
我知道要获得整数的二进制补码,我们首先翻转位并添加一个,但我很难计算出 Tmax 和 Tmin?
在使用二进制补码的有符号整数的 8 位机器中,我如何找到它可以容纳的最大和最小整数值?
tmax 会是 =01111111 吗?和 tmin =11111111?
【问题讨论】:
标签: c
你很接近。
n 位有符号整数的最小值是通过将最高有效位设为 1 和所有其他位为 0 来找到的。
这个值是-2^(n-1)。
n 位有符号整数的最大值是通过将最高有效位设置为 0 并将所有其他位设置为 1 来找到的。
这个值是2^(n-1)-1。
对于 8 位,范围是 -128...127,即10000000...01111111。
在维基百科了解why this works。
【讨论】:
由于会导致负零的溢出,使用二进制补码表示的最小有符号整数的二进制表示通常是符号的一位,然后是所有零位。
如果您将无符号类型中的值分成两组,一组表示负数,另一组表示正数,那么您最终会得到两个零(一个负零和一个正零)。这似乎很浪费,所以很多人决定给它一个价值。它应该有什么价值?嗯,它:
结合这些观点,将该值重新解释为 -128 似乎是有道理的。
【讨论】: