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

Binary 负数如何用32位有符号整数表示?,binary,numbers,Binary,Numbers,负数如何用32位有符号整数表示? 它是二的补码还是一的补码?或者左边的最后一点像一面旗帜? 例如:(-10)通常它是两个补码。现在大多数计算机使用有符号整数,但它可能因硬件体系结构、编程语言或其他特定于平台的问题而有所不同 对于2的补码表示,最高有效(“最左边”)位称为符号位,它将设置为负整数,清除为非负整数。然而,它不仅仅是一面“旗帜”。有关更多信息,请参阅 0xFFFFFFFF = -1 0xFFFFFFFE = -2 0xFFFFFFFD = -3 ... &因此,最高有效位(左侧最后

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

通常它是两个补码。

现在大多数计算机使用有符号整数,但它可能因硬件体系结构、编程语言或其他特定于平台的问题而有所不同

对于2的补码表示,最高有效(“最左边”)位称为符号位,它将设置为负整数,清除为非负整数。然而,它不仅仅是一面“旗帜”。有关更多信息,请参阅

0xFFFFFFFF = -1
0xFFFFFFFE = -2
0xFFFFFFFD = -3
... 
&因此,最高有效位(左侧最后一位)设置为负数。

来自C99标准:

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

-带符号的对应值 位0为负数(符号和幅度)

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

-符号位的值为-(2N-1) (一人之补)

以下哪项适用 是否定义了实现,即 符号位为1且全部为的值 值位零(对于前两个), 或带符号位和所有值位1 (作为补语)是一个陷阱 表示或正常值。在里面 符号和大小的情况 一的补语,如果这个 表示是一个正常值,它是 称为负零


我认为答案是
0110
,前面有1个重复28次,因此看起来像:

1111111111111111111111111111111111111111010

步骤:

  • 10的位表示为:

    0000 1010

  • 所有位的
    0->1
    1->0

    11111111111111111111111111111111111111110101

  • 将1添加到最后一位,并传播到前面的位,完成

    1111111111111111111111111111111111111111010

  • ===


    您可以将其与10相加进行验证,所有位都将得到0。如上所述,它是以2为基础的,并遵循2的补码。

    仅供参考:
    否定
    ->
    添加一个

    以8位的
    5
    为例,引用自

    有一个技巧可以将一个数字从正数转换为负数或相反:

    忽略它们的有符号位(最左边的位)添加它们将得到
    2^N
    (其中N是表示数字的位数)


    如上面8位表示中的示例所示,
    5(0000 0101)
    -5(1111 1011)
    之和将为您提供
    1 0000 0000
    ,即(2^8)

    在什么情况下?不同的系统/平台会做不同的事情。你是说“左边的第一位”?你是说“左边的第一位”?那么“左边的第一位”或“右边的最后一位”呢那么前面的位将是1表示负数,0表示正数?那么0呢?0表示所有的位都为零。解释得很清楚。请您使用这种解释方法来解释浮点数是如何存储的。
    to convert 5 to -5: 0000 0101 - flip -> 1111 1010 - add one -> 1111 1011