我一直在做一些研究,甚至看看按位操作,但我想知道是否有人可以提供他们的意见,以确定二进制数模式是否匹配在更大的二进制数内的任何地方。比如说,如下:
我有以下内容:001011 并且需要查看确切的模式是否匹配在以下任何地方:010100101100
先谢谢大家!
答案 0 :(得分:0)
有几种方式。哪个最好 - 您可以自行决定。一些 C#示例:可能是最简单的一个:只使用function initMap() {
map = new google.maps.Map(document.getElementById('footer-map'), {
center: {lat: -37.111, lng: 144.888},
zoom: 14,
scrollwheel: false,
draggable: false,
disableDoubleClickZoom: true,
panControl:true,
navigationControl: true,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.ZOOM_PAN
}
});
};
作为模式
string
按位:如果你必须使用整数
bool found = "010100101100".Contains("001011");
答案 1 :(得分:0)
检查这个基于python的逐位解决方案。它假设一个32位整数。
import math
x = int("010100101100",2)
y = int("1011",2)
highest1x = int(math.log(x,2))
highest1y = int(math.log(y,2))
mask = int(math.pow(2,highest1y+1)-1)
for i in range(0,int(32 - highest1x)):
z = y ^ x
if ( z & mask == 0):
print "found"
y = y << 1
mask = mask << 1
主要思想是两个相同位模式之间的XOR将产生0。
所以我们继续沿着大的一个方向移动小位模式和掩码,每次都是XOR,然后用掩码和XOR的结果来隔离我们感兴趣的位。如果它们是0,然后在字符串中的那一点有一个匹配。