在数字的二进制表示中计算 1s

count 1s in a number's binary representation

我找到了一种方法,可以使用 C 程序计算给定数字中的集合位数。程序如下:

    unsigned int countSetBits(unsigned int n) 
    { 
        unsigned int count = 0; 
        while (n)
        { 
            count += n & 1; 
            n >>= 1; 
        } 
        return count; 
     } 

现在我正在尝试在 shell 脚本中实现相同的功能,但在其中一行

中遇到了问题
    count=0
    var=128

    while [ $var -gt 0 ]    
    do
            count=$(count + $((var&1))) // throws command not found on console
            var=$((var >> 1))
    done
    echo $count

在这里,尝试打印变量 var(128) 中设置的位数(期望输出 1 bcz 128(10000000) 只设置了一位。)期待您的帮助,因为我是新手 shell脚本。

count=$(count + $((var&1)))

您不需要嵌套算术展开式。上面一行应该是这样的:

count=$((count+(var&1)))

不过我会这样写:

cnt=0 var=128
while [ "$var" -gt 0 ]; do
  : $((cnt+=var&1, var>>=1))
done
echo "$cnt"