如何在 Excel 中计算二进制数的 2 补数。我需要哪些 Excel 函数?
例如,如果我有二进制序列
11101010
,则 2s 补码可以通过以下方式获得:
00010101
00010110
我需要的是上述内容的 Excel 实现。
请记住,发明补码是为了在计算机中用减法来表示负数,因此这个问题可以通过简单的减法来解决,因此先获取补码,然后加一。
=DEC2BIN(255 - BIN2DEC(A1) + 1)
其中A1是一个以二进制数作为文本的单元格。如果你想使用更大的数字,那么使用你想要使用的位数可以表示的最大数字,这里我的例子是8位,所以(2^8)-1 = 255
二进制补码的基本形式是十进制表示法的负数。
与this答案非常相似,
如果 A2 有二进制数,则 B2:
=RIGHT(DEC2BIN(-BIN2DEC(A2)),LEN(A2))
注意事项:
Scott Craner 的答案很棒,因为它实现了 OP 想要使用字符串操作的想法。然而,我觉得更好的想法是通过十进制数的减法来计算 2 的补码。
使用
BIN2DEC('Binary String')
或仅使用您可能已在某个时刻转换为二进制的原始十进制数。
然后,如果您想计算数字的 8 位 2 的补码,您可以简单地使用
2^8
从
POW(2, 8) - BIN2DEC('Binary String')
中减去该数字
然后使用
DEC2BIN()
将其转换回二进制
OP 发布的具有反转位模式和加 1 的 2 补码定义只是这个更基本的 2 补码定义的结果。本教程的作者在页面底部附近讨论了这个定义。此公式遵循您的步骤:基于 Guillermo Adrian Rodrguez Barr 的答案
,我们有一个适用于任意位数的通用公式:
=DEC2BIN(2^LEN(A1)-BIN2DEC(A1))
+1
已包含在内,因为 2^LEN(A1)
获取无符号位范围 + 1。
如果您确实知道想要多少位并想要使用常量,请随意将
LEN(A1)
替换为您想要的多少位,例如 8
。在操作的示例中,这个 8 位公式等效于上面的通用公式:
=DEC2BIN(2^8-BIN2DEC(A1))