读书人

怎么在常量时间内将0后面的1变成0?小

发布时间: 2012-09-18 16:21:42 作者: rapoo

如何在常量时间内将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

读书人网 >汇编语言

热点推荐