【发布时间】:2016-11-13 06:50:23
【问题描述】:
我正在学习汇编中的按位运算。就按位运算而言,找到最长的 0 或 1 字符串是相当先进的,但如何找到最长的交替 1 和 0 字符串。
我认为这与前两个类似,因为您只需要进行右移并执行适当的操作,然后重复直到全为 0,但我无法弄清楚解决方案。有什么想法吗?
谢谢!
编辑
一些例子: 101101010001 有 6 个交替的 1 和 0 的字符串。数字 1010 有一个字符串 4 个连续的 1 和 0。 我真的不关心0和1的交替字符串,所以0101只有2,因为它中间有10
我使用的架构是 ARM A9 处理器
这是我尝试过的
.text
.global _start
_start:
MOV R5, #0//Store final result
MOV R6, #0
MOV R2 , #0
MOV R7, #0
LDR R3 , =TEST_NUM
ONES: LDR R1, [R3] //Load the data word into R1
MOV R0, #0 // R0 will hold the result
LOOP: CMP R1, #0 //loop until data contains no more ones
BEQ NEXT
LSR R2, R1, #1 //Perform shift, followed by and
XOR R1, R1, R2
ADD R0, #1 // count number of iterations
B LOOP
NEXT: CMP R5, R0 //
MOVLE R5, R0
B END
END: B END
TEST_NUM: .word 0x1fffffff, 0x7fffffff
.end
【问题讨论】:
-
我们可以看看你的尝试 Jade 吗?
-
“找到”最长的这样的字符串是什么意思?你能举一些输入和输出的例子吗?
-
您说“在组装中”,但没有提及哪种架构 - 如果没有这些信息,您将无法获得有意义的答案
-
我按照建议进行了编辑
标签: algorithm bit-manipulation bitwise-operators