【问题标题】:Forming a 16-bit signed two's complement for different decimal values为不同的十进制值形成一个 16 位有符号二进制补码
【发布时间】:2019-10-03 02:42:14
【问题描述】:

我一直在尝试将不同的值(主要是小数)转换为 2 的补码格式。我似乎对它们有问题,尤其是分数。

假设我有一个整数值 L = 2^16 - 46,我想将它转换为 2 的补码。

L = 65490,这似乎给了我 1111111111010010 的二进制数。 然后我通过交换位并加一将其转换为 2 的补码,从而得到 L(2's) = 0000000000101110。

现在假设我有一个带分数的小数,例如 K = 0.2522429。将其转换为二进制,我们得到 0.01000000_10010011。再次通过 2 的补码转换,我最终得到 0.10111111_01101101,这似乎是正确的。

但是如果十进制与 16 位不匹配,我该怎么办?或者如果我想要 K/16 操作的 2 的补码?

我会得到 K = 0.01576518125,这将导致二进制的 0.00000100_00001001_0011。正如我们所见,我们现在有 20 位而不是 6 位,而 2 的补码将是 0.1111_10111111_01101101。对于 K/16 操作,我如何才能获得 16 位的结果,例如 -K/8、K/4、-K/2 等不同的变体?

【问题讨论】:

    标签: binary bit-manipulation twos-complement


    【解决方案1】:

    假设我有一个整数值 L = 2^16 - 46,我想将它转换为 2 的补码。

    如果要在2的补码中编码一个数字N,必须确保-2^15≤N≤2^15-1,并且不能将数字2^16-46编码为2的补码中的正数16 位。更准确地说,2^16-46 将是(正)数,其二进制代码将用于在 2 的 C 中以 16 位表示负数 -46。

    现在假设我有一个带分数的小数,例如 K = 0.2522429。将其转换为二进制,我们得到 0.01000000_10010011。再次通过 2 的补码转换,我最终得到 0.10111111_01101101,这似乎是正确的。

    不是真的。 N=0.01000000_10010011 的 2 的 C 为 N'=1.10111111_01101101(或在 16 位上 N=0.01000000_1001001 和 N'=1.10111111_0110110)。从历史上看,小数的第一次应用 2 的 C 和 N 的 2 的 C 是数字 N',例如 N+N'=2。换句话说,N' 是必须加到 N 上才能得到 2 的数,因此得名二进制补码。

    但是如果十进制与 16 位不匹配怎么办?

    我不太明白你的问题。 K=0.2522429 已经不能在 16 位和 0.01000000_10010011b=0.252243042 上精确编码,并且由于小数经常出现,因此您只能对这些数字进行二进制近似。十进制小数表示为 10 的负幂之和,并且大多数时候它们的值不能精确地表示为 2 的负幂之和(因为 1/3 不能精确地表示为 10 的负幂的有限和)。

    因此,如果您想在 16 位上编码一个小数,您可以找到该数字的二进制近似值,并且您只保留 16 位。

    或者如果我想要 K/16 运算的 2 的补码?

    除以 16 是右移 4。对于 2s C 数字,移位必须是算术的,并且 MSB(符号位)必须重复。这将确保这相当于除以 4。因此,如果 N'=1.10111111_01101101,则 N'/4=1.1111_10111111_01101101。当然,位数大于 16,并且您必须只保留 16 个最高有效位 N'=1.11111011_1111011,它等于 -0,015777588,这是结果的近似值。

    但是由于除法,对于任何基数中的任何数字和具有有限位数的任何编码系统都是相同的。例如 53=00110101 并编码为整数 53/16=00000011 或 0.12325621/100=0.00123156 如果您在点的右侧仅保留 8 位数字。

    【讨论】:

      猜你喜欢
      • 2013-04-13
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-21
      • 2020-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多