bin2dec 用于 16 位有符号二进制值(在谷歌表中)
Posted
技术标签:
【中文标题】bin2dec 用于 16 位有符号二进制值(在谷歌表中)【英文标题】:bin2dec for 16 bit signed binary values (in google sheets) 【发布时间】:2021-09-03 11:39:58 【问题描述】:在 google 表格中,我正在尝试将 16 位 signed 二进制数转换为其十进制等效值,但执行此操作的内置函数最多只占用 10 位。我看到的其他问题的解决方案不保留签名。
到目前为止我已经尝试过:
bin2dec 最左边 8 位 * 2^8 + bin2dec 最右边 8 位 在最左边 8 位的 bin2dec 与最右边 8 位的 bin2dec 连接的结果上的 hex2dec我还看到一个建议,将每个位乘以 2 的幂,完全消除 bin2dec。
有什么建议吗?
【问题讨论】:
【参考方案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))
【讨论】:
以上是关于bin2dec 用于 16 位有符号二进制值(在谷歌表中)的主要内容,如果未能解决你的问题,请参考以下文章