怎么在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙
如何在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙。如题,例子如下:01100111100101100从左到右(或者
如何在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙。
如题,例子如下:
01100111100101100
从左到右(或者从右到左都可以)将0后面的1变成0
00100011100000100
小弟不才,麻烦高手帮忙。谢谢。
最好在常量时间内。
[解决办法]
循环判断所有位是不是0
可以使用 TEST 和 SHL 指令判断
SHL作为移位,TEST可以判断位是否为0
[解决办法]
使用ROR\ROL 循环移位 然后OR操作
[解决办法]
[解决办法]x=x&(x>>1)
[解决办法]零后一转零
MOV AX,0100110001110101B
MOV BX,AX
ROR BX,1
AND AX,BX
OK!
零前一转零
ROR改ROL