2016-04-12 6 views
0

Ich habe eine Bitfolge, die basierend auf Benutzereingaben generiert wird. Ich habe auch eine andere Bit-Zeichenfolge, die ich verwenden, um bitweise & mit der generierten Bit-Zeichenfolge durchzuführen. Was ich gerne wissen würde, ist herauszufinden, wie viele Bits der generierten Bitfolge sich von der & Operation geändert haben. Sagen wir also, wenn ich 10000101 als generierten Bitstring und 00101111 als zweiten Bitstring verwende, verwende ich für & Operation. Die Ausgabe des Prozesses sollte 1 sein, da nur das erste Bit der generierten Bitfolge geändert wurde. Wie mache ich das?Ermittlung der Anzahl der Bits, die sich geändert haben (bitweiser Operator)

+0

Es sollte einfach sein, einfach über die Bits der generierten Bit-String zu schleifen und mit dem Original zu vergleichen, nein? –

Antwort

1

Sie müssen das Ergebnis mit dem Original XOR, welche Bits zu identifizieren geändert wurden:

changedBits = (userInput & generatedInput)^userInput 

Dann müssen Sie die Hamming Weight des changedBits Wert berechnen:

int hammingWeight(int i) { 
    i = i - ((i >>> 1) & 0x55555555); 
    i = (i & 0x33333333) + ((i >>> 2) & 0x33333333); 
    return (((i + (i >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24; 
} 

int numberOfChangedBits = hammingWeight(changedBits); 

Passen Sie je nach Bedarf an, wie viele Bits Ihre Eingaben sind.

+1

Java hat eine nette Integer.bitCount, die meisten anderen Sprachen sind nicht so nett. – harold

+0

Awesome! Das ist die Antwort, nach der ich suche. – user3273345

+0

@harold: Danke für den Tipp! – user3273345

1

Was Sie suchen ist bitweise XOR (exklusiv ODER) oder a^b:

10000101^00101111 → 10101010 

ist logisch äquivalent zu (~a&b) | (a&~b)

Verwandte Themen