【问题标题】:bin2dec for 16 bit signed binary values (in google sheets)bin2dec 用于 16 位有符号二进制值(在谷歌表中)
【发布时间】:2021-09-03 11:39:58
【问题描述】:

在 google 表格中,我正在尝试将 16 位 signed 二进制数转换为其十进制等效值,但执行此操作的内置函数最多只占用 10 位。我看到的其他问题的解决方案不保留签名。

到目前为止我已经尝试过:

  • bin2dec 最左边 8 位 * 2^8 + bin2dec 最右边 8 位
  • 在最左边 8 位的 bin2dec 与最右边 8 位的 bin2dec 连接的结果上的 hex2dec

我还看到一个建议,将每个位乘以 2 的幂,完全消除 bin2dec。

有什么建议吗?

【问题讨论】:

    标签: google-sheets binary decimal twos-complement


    【解决方案1】:

    您需要使用自定义函数

    function binary2decimal(bin) {
    return parseInt(bin, 2);  
    }
    

    【讨论】:

      【解决方案2】:

      假设您的二进制数在单元格 A2 中。

      首先,设置格式如下:格式>数字>纯文本

      然后将以下公式放入B2:

      =ArrayFormula(SUM(SPLIT(REGEXREPLACE(SUBSTITUTE(A2&"","-",""),"(\d)","$1|"),"|")*(2^SEQUENCE(1,LEN(SUBSTITUTE(A2&"","-","")),LEN(SUBSTITUTE(A2&"","-",""))-1,-1))*IF(LEFT(A2)="-",-1,1)))

      此公式将处理任何长度的二进制数,无论是正数还是负数,从 1 位到 16 位(实际上,长度为 45 或 46 位)。

      这个公式的作用是将SPLIT 二进制数(如果存在则不带负号)分成单独的位,每列一个;将这些中的每一个乘以 2 乘以相等大小的递减 SEQUENCE 的每个元素的幂,从 LEN(即数量)的高位向下运行到零;最后有条件地应用负号IF 存在。

      如果您需要处理一个 范围,其中每个值都是具有 正好 16 位的正或负二进制数,您可以这样做.假设您的 16 位二进制数在 A2:A 范围内。首先,确保选择所有 A 列并将格式设置为“纯文本”,如上所述。然后将以下数组公式放入 B2 中(确保 B2:B 首先为空):

      =ArrayFormula(MMULT(SPLIT(REGEXREPLACE(SUBSTITUTE(FILTER(A2:A,A2:A<>"")&"","-",""),"(\d)","$1|"),"|")*(2^SEQUENCE(1,16,15,-1)),SEQUENCE(16,1,1,0))*IF(LEFT(FILTER(A2:A,A2:A<>""))="-",-1,1))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-13
        • 2019-10-03
        • 1970-01-01
        • 1970-01-01
        • 2021-03-09
        • 2021-03-27
        • 1970-01-01
        • 2017-09-27
        相关资源
        最近更新 更多