sbyte最小的有符号字节?

时间:2014-03-19 18:54:11

标签: assembly x86

在由kip irvine编写的assembly_language_for_x86_processors书中,他写道

val4 SBYTE -128;最小的有符号字节 var3 SBYTE 127;最大的有符号字节。

我认为第一位是符号位。那么最小的字节应该不是-127?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

以这种方式看待它。在二进制补码表示中,每个位的值是其基于零的位置的幂的2,除了符号位,它是负的。

我们拼出来吧。想象一下,你有一个8位数abcdefgh。每个字母a..h对应一个位,其值可以是0或1。该位序列的整数值为:

(-128)a + 64b + 32c + 16d + 8e + 4f + 2g + h

因此,最小字节大小的整数是a位置为1且其他位置为零的整数。那是-128。最大的一个是a位置为0而其他位置为1的位置。统计他们,这是127。

答案 1 :(得分:0)

two's complement representation中, n 位字的范围是[ - (2 n -1 ),2 n - 1 - 1]。因此,对于sbyte,即8位,它是[-128,127]。

例如,最小8位有符号值(sbyte)是二进制的10000000。在两个补码中, x 的表示是在翻转所有位并添加一个之后 -x 的表示:

 10000000     =  x
 01111111 + 1 = -x
010000000     = -x = 128

            x = -128