【问题标题】:Is two's complement notation of a positive number the same number?正数的二进制补码表示法是同一个数吗?
【发布时间】:2010-10-22 02:22:04
【问题描述】:

一个正数的二进制补码表示法和它的二进制表示法一样吗?

【问题讨论】:

  • 是的第一位(符号位)也被忽略
  • 与什么相同的数字?一般来说,正数在二进制补码、一个补码或符号大小中是相同的,如果这就是您所要求的。
  • 所有的正数和它的补码是否都是同一个数,比如 0111(binary) = 7 = 0111(7 in two's complement)。

标签: binary complement


【解决方案1】:

一些答案​​和 cmets 混淆了“二进制补码符号”和“数字的二进制补码”之间的关系。这个问题可能需要澄清一下,但它显然是在询问“二进制补码表示法”。

二进制补码表示法包括正数和负数。二进制数可能意味着很多东西,所以为了确定任何二进制数应该代表什么,首先必须知道正在使用什么符号或编码。二进制数可以是无符号整数、二进制补码整数、IEEE 浮点数、字符串或其他任何东西。

所以 7 在二进制补码表示法中是 00000111,就像它是一个无符号整数一样。二进制补码表示法中的 -7 是 11111001。

所以,是的,二进制补码表示法中的正整数与无符号整数的表示方式相同(假设它是所使用的位数的有效整数)。

【讨论】:

    【解决方案2】:

    我认为你在这里混淆了一些东西。正整数通常存储为简单的二进制数。 1 是 1,10 是 2,11 是 3,等等。负整数存储为作为其绝对值的二进制补码,即对应的正整数。使用这种表示法时,正数的二进制补码是负数。

    为了翻转一个数字的符号,您总是计算该数字的二进制补码:翻转所有位,然后加 1。这与原始数字是正数还是负数无关。

    示例:8 位带符号二进制表示法中的 3 是 00000011。要翻转符号,首先翻转所有位 (11111100),然后加 1 (11111101)。所以,-3 是 11111101。要再次翻转符号,首先翻转所有位(00000010),然后添加 1(00000011),您可以看到这是相同的 3。

    【讨论】:

    • “二进制补码”和“数字的二进制补码”是两个不同的东西。问题是关于二进制补码表示法。
    • 二进制补码表示法使用 n 位二进制补码来翻转符号。对于 8 位数字,从 2^8 中减去该数字以产生负数。
    【解决方案3】:

    正数的补码表示法是同一个数吗?

    很好的例子来自wiki,通过注意到 256 = 255 + 1 来实现与二进制补码的关系,并且 (255 - x) 是 x 的补码

    0000 0111=7 二进制补码是 1111 1001= -7

    它的工作方式是 msb(最高有效位)接收一个负值,因此在上述情况下

    -7 = 1001= -8 + 0+ 0+ 1

    Edit- 用二进制补码表示的正数与用无符号表示的数字相同(尽管最高有效位必须为零)。一个负数可以用二进制补码表示法写入,方法是将其绝对值的所有位取反,然后将结果加 1。 Two's-complement notation

    k位二进制补码表示法可以表示的最大数是2^(k-1)−1

    【讨论】:

    • “数字的补码”和“补码符号”是不同的东西。正数可以用二进制补码表示。
    【解决方案4】:

    从我在计算机科学课上学到的知识,二进制补码、一个补码和有符号幅度仅在正整数值中是相同的。这将与负整数值不同,对于一个补码,您必须翻转位,对于二进制补码,保留翻转的位并添加 1 位以将负位变为绝对整数。

    我还在学习,一年级计算机科学专业的学生,​​希望对你有所帮助。

    【讨论】:

      【解决方案5】:

      正数的2的补码不是同一个数,它们不会以2的补码形式存储在内存中。 在正数的情况下,它们按原样存储在内存中,仅在负数的情况下,表示形式为 2 的补码形式 负数以 2 的补码形式存储,因为 2 的补码有利于减法。 示例:5 + -7 = -2 这里 -7 以 2 的补码形式 (1001) 存储。 0101 + 1001 = 1110 请注意,我们会自动得到否定答案

      【讨论】:

        【解决方案6】:

        这是真的。如果我们不给负数表示加 1,我们就会得到值 0 和 -0,这有点浪费。

        【讨论】:

        • 2s 补码有 0000 = 0 和 1000 = 0(1 个符号位,3 个非符号位)
        • @Nathan: 2 的补码没有 0 的两种表示形式。在 4 位 2 的补码中,范围是 -8 到 7,二进制 1000 是 -8。
        【解决方案7】:

        您可以使用this 检查数字在二元组中的表示方式。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-21
          • 2021-12-22
          相关资源
          最近更新 更多