Der einfachste Lösungsansatz ist per Brute-Force.
Try&Error:
Code:
//Code, der analysiert werden soll
const int code = 0b1001011;
//Bitlänge des Codes
const int bitlaenge = 7;
//Maximale Distanz, die angezeigt werden soll
const int maxHd = 3;
//Für 7 Bit gibt es 2^7 Codes von 0 bis 2^7 - 1
const int pruefeBis = (1<<bitlaenge) - 1;
//Für alle erlaubten Kombinationen Durchlauf starten
for(int i = 0; i < pruefeBis; i++)
{
//Sofern Code nicht identisch mit pruefeBits ist und innerhalb der
//angezeigten HD, ausgeben
if(i != code && hd(code, i, bitlaenge) < maxHd)
{
System.out.println("Code: " + Integer. toBinaryString(i));
}
}
Berechnung der HD:
Code:
int function hd(int code1, const int code2, const int bitlaenge)
{
//Initial HD mit null annehmen
int hd = 0;
//Differenz der Codes berechnen
code1 = code1 ^ code2;
//Nachfolgend Anzahl der unterschiedlichen Bits bestimmen
//Für alle Bits
for(int i = 0; i < bitlaenge - 1; i++)
{
//Nur unterstes Bit betrachten
//Sofern unterstes Bit = 1, addieren zu HD
hd += (code1 & 1);
//Code shiften
code1 = code1 >> 1;
}
return hd;
}
Nicht erprobt, aber sollte vom Sinn passen.