怎么在常量时间内将0后面的1变成0?小弟不才,麻烦高手帮忙
如何在常量时间内将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
如题,例子如下:
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