在由kip irvine编写的assembly_language_for_x86_processors书中,他写道
val4 SBYTE -128;最小的有符号字节 var3 SBYTE 127;最大的有符号字节。
我认为第一位是符号位。那么最小的字节应该不是-127?
非常感谢任何帮助。
答案 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