首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在数组中设置/取消设置n个连续位

在数组中设置/取消设置n个连续位
EN

Stack Overflow用户
提问于 2012-10-12 03:07:38
回答 1查看 269关注 0票数 0

我想要找到在数组中设置或取消设置n连续位的位置。

数组示例:

代码语言:javascript
复制
a[0] = 0x0fffffff  
a[1] = 0x000000f0  
a[2] = 0xffffff00

如果我想查找前8个未设置的位,它必须返回28 (数组中的第28位)

如果我想找到前32个未设置的位,它必须返回40 (数组中的第40位位置)

我正在尝试扩展我找到的here代码,以便它可以与任意大的数组一起工作:

代码语言:javascript
复制
int BitCount(unsigned int u)
 {
         unsigned int uCount;

         uCount = u
                  - ((u >> 1) & 033333333333)
                  - ((u >> 2) & 011111111111);
         return
           ((uCount + (uCount >> 3))
            & 030707070707) % 63;
 }
EN

回答 1

Stack Overflow用户

发布于 2013-10-10 00:34:08

这是我想出来的:

简单地循环数组,一次检查一位,看看是否设置了它。

代码语言:javascript
复制
int UnsetBits(unsigned int a[], int sizeOfArray, int requiredBits)
{
    //number of found bits in a row
    int found = 0;

    //current index in array
    int index = 0;

    //current bit
    int bit = 0;

    while(index < sizeOfArray)
    {
        //isolate the current bit
        int data = ((a[index] << (31 - bit)) >> 31);

        //bit is unset
        if(data == 0)
        {
            found++;

            //found required amount, return start position
            if(found == requiredBits)
            {
                return bit + 1 + (index * 32) - requiredBits;
            }
        }
        //bit is set, reset found count
        else
        {
            found = 0;
        }

        //increment which bit we are checking
        bit++;

        //increment which array index we are checking
        if(bit >= 32)
        {
            bit = 0;
            index++;
        }
    }

    //not found
    return -1;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12846789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档