2016-07-14 17 views
0

Ich habe einige Nachforschungen angestellt, und sogar einen Blick auf bitweise Operationen geworfen, aber ich frage mich, ob jemand ihre Meinung über den besten Weg geben könnte zu bestimmen, ob Binärzahl Muster ist überall innerhalb einer größeren Binärzahl abgestimmt. Nehmen wir zum Beispiel die folgende:Bester Weg zu bestimmen, ob Binärzahlmuster in größere Binärzahl passt

Ich habe folgendes: 001011 und müssen sehen, ob die genaue Muster innerhalb überall abgestimmt ist: 010100101100

Vielen Dank im Voraus alle!

+0

'bool found =" 010100101100 ".Kontakt (" 001011 ");' nicht der schnellste, aber wahrscheinlich der einfachste Weg –

+0

Sehr clevel @DmitryBychenko. Vielen Dank! –

+0

Bitte wählen Sie eine Antwort – Kariem

Antwort

0

Es gibt mehrere Möglichkeiten. Welches ist die beste - Sie entscheiden. Einige C# Beispiele: wahrscheinlich die einfachste: Verwenden Sie nur string für Muster

bool found = "010100101100".Contains("001011"); 

bitweise: Wenn Sie mit ganzen Zahlen arbeiten müssen

private static bool Search(int toFind, 
          int source, 
          int toFindLength, 
          int sourceLength = 32) { 
    for (int i = 0; i <= sourceLength - toFindLength; ++i) 
    if (((source >> i) & toFind) == toFind) 
     return true; 

    return false; 
} 

... 

string stSource = "010100101100"; 
string stToFind = "001011"; 

int source = Convert.ToInt32(stSource, 2); 
int toFind = Convert.ToInt32(stToFind, 2); 

bool found = Search(toFind, source, stToFind.Length, stSource.Length); 
0

prüfen diese Python basierte bitweise Lösung. Es nimmt eine 32-Bit-Ganzzahl an.

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 

Die Hauptidee ist, dass XOR zwischen zwei identischen Bitmuster 0

produzieren So halten wir das kleine Bitmuster und die Maske entlang der großen eine Verschiebung, XOR jedes Mal ,, und dann UND das Ergebnis der XOR mit der Maske, um die Bits zu isolieren, an denen wir interessiert sind. Wenn sie 0 sind, dann gab es eine Übereinstimmung an diesem Punkt in der Kette.