在C中连续计数1

Map*_*pan 5 c bitwise-operators

可能重复:
查找连续的位串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但是,如果你的动机是"我希望别人向我解释______",那么你可能没问题.)

Mar*_*ark 0

int count_consecutive_bits(unsigned int x) {
    int res = 0;
    while (x & 0x80000000) { ++res; x <<= 1; }
    return res;
}
Run Code Online (Sandbox Code Playgroud)