作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我搞砸了汇编语言编程,并且很好奇如何使用逻辑运算符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
。我会尽力解释。
16 == 10000b, 8 == 1000b
等。
15 = 01111b, 7 = 0111b
等。因此基本上是创建一个掩码,该掩码可用于测试是否设置了任何低位。我希望那是清楚的。
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.
关于assembly - 如何仅使用逻辑运算符AND判断数字是否为4的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748673/
我是一名优秀的程序员,十分优秀!