使用右移和按位AND?查找二进制数模式。 [英] Find a pattern of binary numbers using shift-right and bitwise-AND?

查看:29
本文介绍了使用右移和按位AND?查找二进制数模式。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在汇编中编写一个函数,该函数将检测较长的二进制数是否包含较小的二进制模式。

示例:
100111是否包含1001

当我读到这个问题时,我想我应该对大数字和它的较小模式进行逐位AND运算,同时每次在循环中向右(逻辑)移位。

因此,在我的脑海中,我认为它可以:

100111 AND 1001 = 0  
Shift-right 1  
010011 AND 1001 = 0  
Shift-right 1  
001001 AND 1001 = 1 // Pattern FOUND!  

重复此操作,直到数字移位到零,或者返回1。

但是,我想我一定是搞错了,因为在循环的第一次运行时,我放入的大多数内容都返回1。我是否混淆了和的用法?

推荐答案

问题是"部分匹配"也会为您的返回非零值,并检查:

100111 AND 001001 = 000001

因此,这将测试任何位是否匹配,但您要确保所有位都相同。AND的结果需要等于您正在搜索的模式:

x = 100111
if (x AND 1001 == 1001)
  print "found"

这篇关于使用右移和按位AND?查找二进制数模式。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆