【问题标题】:Distinguishing between signed binary values区分有符号二进制值
【发布时间】:2013-10-16 05:08:10
【问题描述】:

取十进制 8 的二进制表示:0000 1000。使用二进制补码,通过交换所有位并加一来找到相反的结果:1111 1000。现在我们有一个十进制 -8 的二进制表示。

但是我们怎么知道将这个十进制解释为 -8 还是 248?

【问题讨论】:

  • 2 的补码意味着您正在使用有符号值。

标签: binary


【解决方案1】:

当有人写下一个二进制数时,他们通常会指定它是有符号的还是无符号的。如果他们没有指定任何内容,您可以假定它是无符号的,在这种情况下为 248。

【讨论】:

    【解决方案2】:

    符号位,最左边位,最高有效位,为 1,表示它是一个负数。

    如果你有 8 位,你只能得到 -128 到 127(这 256 个不同的值)。所以最大的正数是 01111111 你不能超过 127。所以这就是你知道的。

    注意 - 最左边的位仍然称为符号位,即使它不是符号和幅度表示的符号位。它除了符号之外还具有价值,但它确实显示了符号。 wikipedia twos complement
    “最高位决定数字的符号,有时称为符号位。与符号和大小表示不同,符号位也有权重..”。

    稍微切线 - 我要添加以下内容,作为快速执行 2s 补码的速记,这是一个示例,如果您必须将 0101 放入 2s 补码中,请从右侧按住第一个 1。然后轻弹其余的部分。所以按住最右边的 1 并轻弹其余部分。 0101 变为 1011。注意这与 0101 反转为 1010 并加 1 所以 1011 的非快捷方式相同。当你有 1011 时,你可以减一并反转得到 0101。你可以反转并加 1 和你得到 0101。你也可以使用相同的技术,按住最右边的第一个 1,然后轻弹其余的,然后你回到 0101。这适用于任何一个。 0110 在 2s 补码中,按住最右边的 10,轻弹左边的,你得到 1010。

    你可能会问,你怎么知道它是 2s 补码,从某种意义上说,你怎么知道数字存储在什么数字格式中。无论是 2s 补码还是 1s 补码。或符号幅度或浮点。好吧,你必须知道'因为你存储了它!你不能存储数据,却不记得数据的含义!

    【讨论】:

      猜你喜欢
      • 2017-07-25
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-21
      • 1970-01-01
      • 2015-09-12
      • 2014-06-20
      相关资源
      最近更新 更多