也许你可以帮助我解决以下问题,这可以帮助我加速我正在考虑的内存管理器(我不确定是否存在解决方案 - 我没有找到一个).
我有一个32位寄存器,我需要找到它中是否有n个连续的设置位,如果是,那么它们的偏移量是多少.例如,如果寄存器保持以下值111100000000000000000001111111000且n等于4 - 接受以下任何答案(偏移量从0开始):
3,4,5,6,28
我所拥有的原子操作都是常规的按位运算(&,|,〜,...),并且还找到最低有效位偏移(上面的寄存器中为3).该算法(假设存在一个) - 应该不超过5个原子操作.
可能重复:
查找连续的位串1或0
是否有可能从左数开始计算整数中的连续1?所以:从最高位开始的连续设置位的总数.
仅使用:
! ~ & ^ | + << >>
-1= 0xFFFFFFFF将返回32
0xFFF0F0F0 将返回12(FFF = 111111111111) 
不幸的是没有循环.
可以承担机器:
使用2s补码,32位整数表示.
算术地进行右移.
将整数移位超过字大小时,会出现不可预测的行为.
我被禁止:
使用任何控制结构,如if,do,while,for,switch等.
定义或使用任何宏.
在此文件中定义任何其他功能.
调用任何功能.
使用任何其他操作,例如&&,||, - 或?:
使用任何形式的铸造.
使用除int之外的任何数据类型.这意味着您不能使用数组,结构或联合.
我看过 Finding连续的1位或0位字符串 它是使用循环,我无法使用.我甚至不知道从哪里开始.
(是的,这是一项任务,但我只是要求那些熟练的人帮忙.我已经完成了所有我需要做的事情,但是这个不会起作用.)
(对于那些仅仅因为它是为了学校而贬低的人:常见问题:1一个特定的编程问题,检查2但是,如果你的动机是"我希望别人向我解释______",那么你可能没问题.)
有没有人对此有一个简明的答案?我在职业杯上看到了这个.http://www.careercup.com/question?id=4860021380743168
给定整数的二进制表示,例如15为1111,找到最大的最长连续序列0.扭曲是需要在log N中完成的.
例如.10000101的答案应该是4,因为有4个连续的零.
如果你有一个c ++的答案,那对我来说是最好的