如何在32位机器中表示符号位

时间:2012-06-21 12:22:01

标签: c byte bit

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

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

4 个答案:

答案 0 :(得分:5)

字节是位组。它们没有任何固有的含义,也没有构成它们的位。仅在您举例时给出含义。 选择将这四个字节解释为有符号整数,然后这些位意味着它们的意思,因为平台设计者这么说。

在几乎所有流行的体系结构中,整数都使用two's complement表示。这意味着:

  1. 整个值只有一个符号位(不是每个字节都有),但这是一个事实上的条件,因为平台设计者选择使用两个补充 - 不是因为宇宙中的所有MSB都有一些特殊的东西。
  2. 对于无符号值(显然)没有任何符号位。

答案 1 :(得分:3)

C中整数的具体表示是未由标准指定。但是,实际上,大多数(几乎所有?)机器都会使用two's complement表示负数。二进制补码没有符号位,本身,但整数的最高有效位对于负数为1,对于非负数为0,

答案 2 :(得分:0)

在大多数架构上,你的32位有符号整数存储在two's complement中:只有一个“符号位”(严格来说并不是真的)。​​

答案 3 :(得分:0)

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