无法迭代int的位表示

joh*_* Gu 2 c#

我需要循环一个整数的位表示,然后我需要计算它中的零个数.我厌倦了下面的代码,但不幸的是它没有用:

public int calculate(int i)
{
            string a = Convert.ToString(i, 2);
            int[] array = new int[a.Length];
            int number = 0;

            for (int n = 0; n < s.Length; n++)
            {
                iarray[n] = s[n]; // build an array of intigers representing the bits valies such as 0011100
            }

            for (int n = 0; n < array.Length; n++)
            {
                if (array[n] == 0) {
                   number = number + 1;
            }

            return number
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议为什么它没有按预期工作?

Mar*_*ell 5

它不起作用的原因是你在比较字符('0',值48!= 0)

只需使用位运算符,使用无符号数学运算来避免右移负数的复杂化:

要计算全零:

var u = (uint)i;
int count = 0;
for(int bit = 0; bit < 32; bit++)
{
    if((u & 1)==0) count++;
    u  = u >> 1;
}
Run Code Online (Sandbox Code Playgroud)

要将零计数到最重要的设置位:

var u = (uint)i;
int count = 0;
while(u != 0)
{
    if((u & 1)==0) count++;
    u  = u >> 1;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要优化,还有更多奇特的方法.