假设我在 32 位机器上工作。参考作为符号位的 MSB(最高有效位),我的问题是它如何代表这个架构。
我的理解是每个字节都有一个符号值。因此,如果是这种情况,那么将有四个有符号位。我在这里是正确还是遗漏了什么。谢谢!
字节是一组位。它们没有任何内在含义,构成它们的部分也没有。仅当您选择将这四个字节解释为有符号整数时才给出含义,然后这些位表示它们的含义,因为平台设计者是这样说的。
在几乎所有流行的架构中,整数都使用二进制补码表示。这意味着:
标准没有指定C 中整数的具体表示。然而,在实践中,大多数(几乎所有?)机器将使用二进制补码表示负数。二进制补码本身没有符号位,但整数的最高有效位将是 1 用于负数,0 用于非负数,
在大多数架构上,您的 32 位有符号整数存储在二进制补码中:只有一个“符号位”(严格来说,这并不是一个真正的符号位)。
如果您使用有符号整数,那么编译器会将字节组视为一个整数,并且该组有一个符号位。在 C 术语中:当您使用 时int16_t
,两个字节有一个符号位。对于int32_t
,四个字节有一个。对于signed char
,每个有符号字符 (=byte) 都有一个符号位。