【发布时间】:2016-04-19 07:46:07
【问题描述】:
我要发表免责声明,说这是我的作业问题。所以我不一定要你解决它,我只是想澄清一下。
确切的问题是这样的:
编写一个函数,用最少的整数交换奇数位和偶数位 尽可能的指令(例如,位 0 和位 1 交换,位 2 和 位 3 被交换,依此类推)。
它还暗示不需要条件语句。
我进行了一番调查,发现如果我以某种方式将偶数位和奇数位分开,我可以使用移位来完成此操作。我不明白的是如何操作单个位。在 python(我习惯使用的编程语言)中,使用索引运算符很容易,因为您可以只执行 number[0],例如,您可以获得第一位。你如何为装配做这样的事情?
编辑: 所以@jotik,谢谢你的帮助。我实现了这样的东西:
mov edi, ebx
and edi, 0x5555555555555555
shl edi, 1
mov esi, ebx
and esi, 0xAAAAAAAAAAAAAAAA
shr esi, 1
or edi, esi
mov eax, edi
当我看到 |运算符,我在想 OR 是 ||。愚蠢的错误。
【问题讨论】:
-
您需要的一切都在这里:en.wikipedia.org/wiki/Bitwise_operations_in_C。转换为 asm 很简单。
-
Stack Overflow 是一个 问答 网站,因此请从 question 中删除您的解决方案并将其发布为正确的answer i>.
-
哪个32位寄存器可以存储
0x5555555555555555这样的数字?