1

假设我在 32 位机器上工作。参考作为符号位的 MSB(最高有效位),我的问题是它如何代表这个架构。

我的理解是每个字节都有一个符号值。因此,如果是这种情况,那么将有四个有符号位。我在这里是正确还是遗漏了什么。谢谢!

4

4 回答 4

5

字节是一组位。它们没有任何内在含义,构成它们的部分也没有。仅当您选择将这四个字节解释为有符号整数时才给出含义,然后这些位表示它们的含义,因为平台设计者是这样说的。

在几乎所有流行的架构中,整数都使用二进制补码表示。这意味着:

  1. 整个值只有一个符号位(不是每个字节),但这是事实上的条件,仅仅是因为平台设计者选择使用二进制补码——而不是因为宇宙中所有 MSB 都有什么特别之处。
  2. 无符号值根本没有符号位(显然)。
于 2012-06-21T12:24:54.567 回答
3

标准没有指定C 中整数的具体表示。然而,在实践中,大多数(几乎所有?)机器将使用二进制补码表示负数。二进制补码本身没有符号位,但整数的最高有效位将是 1 用于负数,0 用于非负数,

于 2012-06-21T12:25:59.717 回答
0

在大多数架构上,您的 32 位有符号整数存储在二进制补码中:只有一个“符号位”(严格来说,这并不是一个真正的符号位)。

于 2012-06-21T12:25:06.967 回答
0

如果您使用有符号整数,那么编译器会将字节组视为一个整数,并且该组有一个符号位。在 C 术语中:当您使用 时int16_t,两个字节有一个符号位。对于int32_t,四个字节有一个。对于signed char,每个有符号字符 (=byte) 都有一个符号位。

于 2012-06-21T12:26:08.330 回答