怎么在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙

如何在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙。
如题,例子如下:

01100111100101100
从左到右(或者从右到左都可以)将0后面的1变成0
00100011100000100


小弟不才,麻烦高手帮忙。谢谢。
最好在常量时间内。

------解决方案--------------------
循环判断所有位是不是0

可以使用 TEST 和 SHL 指令判断

SHL作为移位,TEST可以判断位是否为0
------解决方案--------------------
使用ROR\ROL 循环移位 然后OR操作
------解决方案--------------------
探讨
引用:
使用ROR\ROL 循环移位 然后OR操作


那还是要循环啊?32位就32次循环,64位就64次循环,慢了。不过谢谢你回复。

------解决方案--------------------
x=x&(x>>1)
------解决方案--------------------
零后一转零
MOV AX,0100110001110101B
MOV BX,AX
ROR BX,1
AND AX,BX

OK!

零前一转零
ROR改ROL