C 如何计算 long 变量中最长连续 0 序列的长度?

C How can I count length of the longest continuous sequence of 0s in long variable?

我有一个简单的函数,它计算 long 变量中有多少个 0,其中 是某个正整数值的二进制表示。但我需要实现一个新功能,它将 return 最长连续 0 序列的长度...

0 计数函数:

int nullSeq(long binn)
{
    int count=0;

    if(binn==0)
        return 1;

    while(binn!=0)
    {
        if ((binn & 1) == 0)
        {
            count++;
        }
        binn=binn >> 1;
    }

    return count;
}

F.e。数字559。559的二进制表示是1000101111。0计数函数将return 4。最长的连续零序列应该是3。直到现在我都无意识地使用全零的值作为最长序列。它适用于一些数字。但是我需要实现一个新函数来找到最长的零序列。

您实际上是在计算找到的 总数 个零。当你找到一个 0 时你需要增加计数器,当你找到一个 1 时将计数器设置为 0,并且你必须跟踪计数器的最大值。

int nullSeq(long binn)
{
    int count=0, maxcount=0;

    if(binn==0) {
        return 1;
    }

    while(binn!=0) {
        if ((binn & 1) == 0) {
            count++;
            if (count > maxcount) {
                maxcount = count;
            }
        } else {
            count = 0;
        }
        binn=binn >> 1;
    }
    return maxcount;
}