【发布时间】: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