相关疑难解决方法(0)

如何查找32位缓冲区中是否有n个连续的设置位?

也许你可以帮助我解决以下问题,这可以帮助我加速我正在考虑的内存管理器(我不确定是否存在解决方案 - 我没有找到一个).

我有一个32位寄存器,我需要找到它中是否有n个连续的设置位,如果是,那么它们的偏移量是多少.例如,如果寄存器保持以下值111100000000000000000001111111000且n等于4 - 接受以下任何答案(偏移量从0开始):

3,4,5,6,28

我所拥有的原子操作都是常规的按位运算(&,|,〜,...),并且还找到最低有效位偏移(上面的寄存器中为3).该算法(假设存在一个) - 应该不超过5个原子操作.

algorithm bit-manipulation

7
推荐指数
2
解决办法
2564
查看次数

在C中连续计数1

可能重复:
查找连续的位串1或0

是否有可能从左数开始计算整数中的连续1?所以:从最高位开始的连续设置位的总数.

仅使用:

! ~ & ^ | + << >>
Run Code Online (Sandbox Code Playgroud)

-1= 0xFFFFFFFF将返回32

0xFFF0F0F0 将返回12(FFF = 111111111111)

不幸的是没有循环.

可以承担机器:

  1. 使用2s补码,32位整数表示.

  2. 算术地进行右移.

  3. 将整数移位超过字大小时,会出现不可预测的行为.

我被禁止:

  1. 使用任何控制结构,如if,do,while,for,switch等.

  2. 定义或使用任何宏.

  3. 在此文件中定义任何其他功能.

  4. 调用任何功能.

  5. 使用任何其他操作,例如&&,||, - 或?:

  6. 使用任何形式的铸造.

  7. 使用除int之外的任何数据类型.这意味着您不能使用数组,结构或联合.

我看过 Finding连续的1位或0位字符串 它是使用循环,我无法使用.我甚至不知道从哪里开始.

(是的,这是一项任务,但我只是要求那些熟练的人帮忙.我已经完成了所有我需要做的事情,但是这个不会起作用.)

(对于那些仅仅因为它是为了学校而贬低的人:常见问题:1一个特定的编程问题,检查2但是,如果你的动机是"我希望别人向我解释______",那么你可能没问题.)

c bitwise-operators

5
推荐指数
1
解决办法
5104
查看次数

Algo用于在log(N)时间内查找连续项目

有没有人对此有一个简明的答案?我在职业杯上看到了这个.http://www.careercup.com/question?id=4860021380743168

给定整数的二进制表示,例如15为1111,找到最大的最长连续序列0.扭曲是需要在log N中完成的.

例如.10000101的答案应该是4,因为有4个连续的零.

如果你有一个c ++的答案,那对我来说是最好的

c++ algorithm

0
推荐指数
1
解决办法
189
查看次数

标签 统计

algorithm ×2

bit-manipulation ×1

bitwise-operators ×1

c ×1

c++ ×1