Map*_*pan 5 c bitwise-operators
可能重复:
查找连续的位串1或0
是否有可能从左数开始计算整数中的连续1?所以:从最高位开始的连续设置位的总数.
仅使用:
! ~ & ^ | + << >>
Run Code Online (Sandbox Code Playgroud)
-1= 0xFFFFFFFF将返回32
0xFFF0F0F0 将返回12(FFF = 111111111111)
不幸的是没有循环.
可以承担机器:
使用2s补码,32位整数表示.
算术地进行右移.
将整数移位超过字大小时,会出现不可预测的行为.
我被禁止:
使用任何控制结构,如if,do,while,for,switch等.
定义或使用任何宏.
在此文件中定义任何其他功能.
调用任何功能.
使用任何其他操作,例如&&,||, - 或?:
使用任何形式的铸造.
使用除int之外的任何数据类型.这意味着您不能使用数组,结构或联合.
我看过 Finding连续的1位或0位字符串 它是使用循环,我无法使用.我甚至不知道从哪里开始.
(是的,这是一项任务,但我只是要求那些熟练的人帮忙.我已经完成了所有我需要做的事情,但是这个不会起作用.)
(对于那些仅仅因为它是为了学校而贬低的人:常见问题:1一个特定的编程问题,检查2但是,如果你的动机是"我希望别人向我解释______",那么你可能没问题.)
int count_consecutive_bits(unsigned int x) {
int res = 0;
while (x & 0x80000000) { ++res; x <<= 1; }
return res;
}
Run Code Online (Sandbox Code Playgroud)