负数如何用32位有符号整数表示?

时间:2010-05-28 18:40:00

标签: binary numbers

负数如何用32位有符号整数表示? 它是两个还是一个补码?或者左边的最后一点就像一面旗帜? 例如:( - 10)

7 个答案:

答案 0 :(得分:17)

如今大多数计算机都使用two's complement来表示签名整数,但它可能因硬件架构,编程语言或其他特定于平台的问题而异。

对于二进制补码表示,最重要的(“最左边”)位称为符号位,它将被设置为负整数并且清除为非负整数。然而,它不仅仅是一个“旗帜”。有关详细信息,请参阅Wikipedia article

答案 1 :(得分:4)

通常它是两个补码。

答案 2 :(得分:4)

来自C99标准:

  

对于有符号整数类型,其位数为   对象表示应为   分为三组:价值​​位,   填充位和符号位。那里   不需要任何填充位;那里   应该是一个符号位。每   作为值位的位应具有   与同一位相同的值   对象表示   相应的无符号类型(如果有的话)   是有符号类型中的M值位   和N在无符号类型中,则M =   N)。如果符号位为零,则应为   不影响结果值。如果   符号位是1,值应为   通过以下方式之一进行修改:

     

- 带符号的对应值   位0被否定(符号和幅度);

     

- 符号位的值为 - (2N)   (二的补充);

     

- 符号位的值为 - (2N - 1)   (补充)。

     

以下哪项适用   实现定义,是否   符号位1和全部的值   值位零(对于前两个),   或者使用符号位和所有值位1   (对于那些补充),是一个陷阱   表示或正常值。在   符号和幅度的情况   如果是这样,那就是补充   表示是一个正常的值   称为负零。

答案 3 :(得分:3)

我认为答案是0110,之前重复了28次,因此它看起来像:

1111 1111 1111 1111 1111 1111 1111 0110;

步骤:

  1. 10的位表示是:

    0000 0000 0000 0000 0000 0000 0000 1010;

  2. 所有位都是
  3. 0->11->0

    1111 1111 1111 1111 1111 1111 1111 0101;

  4. 在最后一位加1,并传播到前面的位,完成!

    1111 1111 1111 1111 1111 1111 1111 0110;

  5. ===

    您可以通过添加10进行验证,并且所有位都将获得0。如上所述,它是基于2的,并且遵循两个补码。

答案 4 :(得分:1)

0xFFFFFFFF = -1
0xFFFFFFFE = -2
0xFFFFFFFD = -3
... 

&安培;等等

答案 5 :(得分:0)

最高有效位(左边的最后一位)设置为负数。

答案 6 :(得分:0)

仅供参考:website.DateCreated ' website.author 'As New Values(Of Organization, Person) -> negation

adding one为例,引用wiki的8位

5

有一个技巧可以将数字从正数转换为负数,反之亦然:

添加它们而忽略其有符号位(最左边的位)将得到to convert 5 to -5: 0000 0101 - flip -> 1111 1010 - add one -> 1111 1011 (其中N是代表数字的位数)。

如上面在 8位中的示例所示,2^N5 (0000 0101)的总和为-5 (1111 1011),即(2 ^ 8)。