在 Excel 中计算 2 的补码

问题描述 投票:0回答:5

如何在 Excel 中计算二进制数的 2 补数。我需要哪些 Excel 函数?

例如,如果我有二进制序列

11101010
,则 2s 补码可以通过以下方式获得:

  1. 将所有 1 替换为 0,将 0 替换为 1:
    00010101
  2. 将步骤 1 的结果加 1:
    00010110

我需要的是上述内容的 Excel 实现。

excel binary
5个回答
4
投票

请记住,发明补码是为了在计算机中用减法来表示负数,因此这个问题可以通过简单的减法来解决,因此先获取补码,然后加一。

=DEC2BIN(255 - BIN2DEC(A1) + 1)

其中A1是一个以二进制数作为文本的单元格。如果你想使用更大的数字,那么使用你想要使用的位数可以表示的最大数字,这里我的例子是8位,所以(2^8)-1 = 255


1
投票

二进制补码的基本形式是十进制表示法的负数。

this答案非常相似,

如果 A2 有二进制数,则 B2:

=RIGHT(DEC2BIN(-BIN2DEC(A2)),LEN(A2))

注意事项:

  • 二进制数不能超过 10 位或第 1 位为符号位的字符。

1
投票

Scott Craner 的答案很棒,因为它实现了 OP 想要使用字符串操作的想法。然而,我觉得更好的想法是通过十进制数的减法来计算 2 的补码。

使用

BIN2DEC('Binary String')
或仅使用您可能已在某个时刻转换为二进制的原始十进制数。

然后,如果您想计算数字的 8 位 2 的补码,您可以简单地使用

2^8
POW(2, 8) - BIN2DEC('Binary String')

中减去该数字

然后使用

DEC2BIN()

将其转换回二进制 OP 发布的具有反转位模式和加 1 的 2 补码定义只是这个更基本的 2 补码定义的结果。本教程的作者在页面底部附近讨论了这个定义。

此公式遵循您的步骤:

0
投票
=TEXT(DEC2BIN(BIN2DEC(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,1,2),0,1),2,0))+1),REPT("0",LEN(A1)))

在许多情况下,您可能希望补码的位数

0
投票

基于 Guillermo Adrian Rodrguez Barr 的答案

,我们有一个适用于任意位数的通用公式:

=DEC2BIN(2^LEN(A1)-BIN2DEC(A1))

8 位数字将产生 8 位二进制补码,这适用于任意位数。
+1
已包含在内,因为

2^LEN(A1)

 获取无符号位范围 + 1。
如果您确实知道想要多少位并想要使用常量,请随意将 
LEN(A1)

替换为您想要的多少位,例如

8

。在操作的示例中,这个 8 位公式等效于上面的通用公式:
=DEC2BIN(2^8-BIN2DEC(A1))


© www.soinside.com 2019 - 2024. All rights reserved.