gpt4 book ai didi

assembly - 如何仅使用逻辑运算符AND判断数字是否为4的倍数?

转载 作者:行者123 更新时间:2023-12-04 04:49:40 25 4
gpt4 key购买 nike

我搞砸了汇编语言编程,并且很好奇如何使用逻辑运算符AND判断数字是否为4的倍数?

我知道如何使用“div”或“remainder”指令执行此操作,但是我正在尝试通过数字/单词的位操作来执行此操作。

谁能指出我正确的方向?我正在使用MIP,但是与语言无关的答案很好。

最佳答案

好吧,要检测一个数字是否为另一个的倍数,您只需要执行x MOD y即可。如果结果是0,那么它是偶数倍。

的确,对于每个由y构成的幂的2(x MOD y)等同于(x AND (y - 1))

所以:

IF (x AND 3) == 0 THEN
/* multiple of 4 */

编辑:

好的,您想知道 为什么(x MOD y) == (x AND (y - 1))为2的幂的情况下为什么 y。我会尽力解释。

基本上,如果一个数字是2的幂,则它有一个单一的位置1(因为二进制是以2为底)。这意味着所有低位均未置位。例如: 16 == 10000b, 8 == 1000b等。

如果从这些值中的任何一个减去1。最终,未设置的位将被设置,低于该位的所有位将被设置。
15 = 01111b, 7 = 0111b等。因此基本上是创建一个掩码,该掩码可用于测试是否设置了任何低位。我希望那是清楚的。

编辑: BastienLéonard的评论也很好地涵盖了这一点:

if you divide (unsigned) by 4, you shift two bits to the right. Thus the remainder is those two bits, which get lost when you divide. 4 - 1 = 11b, that is, a mask that yields the two rightmost bits when you AND it with a value.



编辑:请参阅此页面以获得更清晰的解释: http://en.wikipedia.org/wiki/Power_of_two#Fast_algorithm_to_check_if_a_positive_number_is_a_power_of_two

它涵盖了检测2的幂,并且如果它是2的幂,则使用AND作为快速模运算。

关于assembly - 如何仅使用逻辑运算符AND判断数字是否为4的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com