当前位置: 代码迷 >> 汇编语言 >> 怎么在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙
  详细解决方案

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

热度:1033   发布时间:2013-02-26 00:00:00.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
  相关解决方案