Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
计算excel单元格列表中的二进制数字_Excel - Fatal编程技术网

计算excel单元格列表中的二进制数字

计算excel单元格列表中的二进制数字,excel,Excel,我试图建立一个公式,将一个十进制数列表转换为二进制数,然后计算在某个位置出现的个数。我试图构建一个数组公式,它是这样的: {=SUM(MID(DEC2BIN(A1:A10;10);9;1)} 这将返回#值。有办法做到这一点吗 编辑:添加示例 Input (Binary Equivalent) 2 0000000010 3 0000000101 7 0000000111 7

我试图建立一个公式,将一个十进制数列表转换为二进制数,然后计算在某个位置出现的个数。我试图构建一个数组公式,它是这样的:

{=SUM(MID(DEC2BIN(A1:A10;10);9;1)}
这将返回#值。有办法做到这一点吗

编辑:添加示例

Input       (Binary Equivalent)

  2             0000000010     
  3             0000000101 
  7             0000000111 
  7             0000000111 
  5             0000000101 
  9             0000001001

 Outputs          Result
(digit to sum
from the right)

  1                 5
  2                 3
  3                 3
  4                 1

如果您试图计数,且许多第二位数设置在一个数字范围内,则可以执行以下操作:

={SUM((MOD(A1:A10,4)>=2)+0)}
为了理解这一点,让我们看一些示例数据

这里我有一些十进制数及其二进制等价物。在C列中,我刚刚提取了第二个数字(即您的
MID(A1,9,1)
)。然后在D列中,我只取模的
4
。您可以看到,当余数大于
2
时,将设置第二个数字

MOD(A1,4)
基本上是将数字除以
4
,并给出余数(如果余数表示为
4
上的分数,则余数的分子)。对于二进制数,除以二的幂就是右移。除以
4
表示右移除以
2
,“脱落”的数字为余数。在这种情况下,它是前两位数字。他们可能是

00 | 0
01 | 1
10 | 2
11 | 3
所以我们看到,只有当余数大于2时,才设置第二个数字

注意原始公式中的
+0
是将
=
的布尔结果转换为整数,这样我们就可以使用
SUM
,即
SUM({TRUE,FALSE})
不起作用,但
SUM({TRUE,FALSE}+0)
计算到
SUM({1,0})
,它起作用

要使其通用,假设您希望对
$E$1
第个数字执行此操作:

=SUM((MOD(A1:A12,2^$E$1)>=2^($E$1-1))+0)

如果您试图计数,且许多第二位数设置在一个数字范围内,则可以执行以下操作:

={SUM((MOD(A1:A10,4)>=2)+0)}
为了理解这一点,让我们看一些示例数据

这里我有一些十进制数及其二进制等价物。在C列中,我刚刚提取了第二个数字(即您的
MID(A1,9,1)
)。然后在D列中,我只取模的
4
。您可以看到,当余数大于
2
时,将设置第二个数字

MOD(A1,4)
基本上是将数字除以
4
,并给出余数(如果余数表示为
4
上的分数,则余数的分子)。对于二进制数,除以二的幂就是右移。除以
4
表示右移除以
2
,“脱落”的数字为余数。在这种情况下,它是前两位数字。他们可能是

00 | 0
01 | 1
10 | 2
11 | 3
所以我们看到,只有当余数大于2时,才设置第二个数字

注意原始公式中的
+0
是将
=
的布尔结果转换为整数,这样我们就可以使用
SUM
,即
SUM({TRUE,FALSE})
不起作用,但
SUM({TRUE,FALSE}+0)
计算到
SUM({1,0})
,它起作用

要使其通用,假设您希望对
$E$1
第个数字执行此操作:

=SUM((MOD(A1:A12,2^$E$1)>=2^($E$1-1))+0)

这是另一种方式,例如,对于右边的第二个数字

=SUMPRODUCT(--ISODD(A1:A10/2))

除以2^(n-1),其中n是从右边开始编号的数字:ISODD函数忽略由除法产生的任何分数。

这是另一种方法,例如,对于从右边开始的第二个数字

=SUMPRODUCT(--ISODD(A1:A10/2))
除以2^(n-1),其中n是从右边开始编号的数字:ISODD函数忽略由除法产生的任何分数。

=SUM(0+MID(DEC2BIN(--A1:A10,10,9,1))

已输入数组

关于

=SUM(0+MID(DEC2BIN(--A1:A10,10,9,1))

已输入数组


对于

位运算,无需将数字视为字符串

{=SUM(BITAND(A1:A10;2^(C1-1))/2^(C1-1))}

假设您要查找的位置通过位操作存储在
C1

中,则无需将数字视为字符串

{=SUM(BITAND(A1:A10;2^(C1-1))/2^(C1-1))}

假设您要查找的位置存储在
C1

中,请发布一些具有所需输出的示例输入。例如,您是否试图查看有多少十进制数设置了第二个二进制数字?您的错误是因为
DEC2BIN
无法接受范围作为其值input@Dan可以,;这只需要一点额外的强制:Lori的简单改进见本文末尾的评论,即=SUM(0+MID(DEC2BIN(-A1:A10,10),9,1))编辑:这应该是=SUM(0+MID(DEC2BIN(-A1:A10,10),9,1)),根据下面发布的解决方案。@XORLX我仍然不明白为什么
-
使它不再是语法错误?请发布一些带有所需输出的示例输入。例如,您是否试图查看有多少十进制数设置了第二个二进制数字?您的错误是因为
DEC2BIN
无法接受范围作为其值input@Dan可以,;这只需要一点额外的强制:Lori的简单改进见本文末尾的评论,即=SUM(0+MID(DEC2BIN(-A1:A10,10),9,1))编辑:这应该是=SUM(0+MID(DEC2BIN(-A1:A10,10),9,1)),根据下面发布的解决方案。@XORLX我仍然不明白为什么
-
使它不再是语法错误?似乎工作得很好,谢谢!不过有一个问题,为什么它需要“+0”才能工作?整洁-也不受dec2bin的限制,只在-512到+511之间工作。似乎工作得很好,谢谢!但是有一个问题,为什么它需要“+0”来工作?整洁-也不受dec2bin的限制,只在-512到+511之间工作。为什么
-
使它工作?你有解释这种奇怪行为的链接吗?另外,我认为你需要两个负数,否则你得到的是2s补码,所以
=SUM(0+MID(DEC2BIN(-A1:A10,10),9,1))
啊,是的。好的一点,那就是附加的负片。将更正我的帖子。为什么
-
使它工作?你有解释这种奇怪行为的链接吗?另外,我认为你需要两张底片,否则你会得到2s补码<