писал и Я бы поделился этим, так как я не вижу много реализаций Java, которые появляются здесь:
static String getGreyCode(int myNum, int numOfBits) {
if (numOfBits == 1) {
return String.valueOf(myNum);
}
if (myNum >= Math.pow(2, (numOfBits - 1))) {
return "1" + getGreyCode((int)(Math.pow(2, (numOfBits))) - myNum - 1, numOfBits - 1);
} else {
return "0" + getGreyCode(myNum, numOfBits - 1);
}
}
static String getGreyCode(int myNum) {
//Use the minimal bits required to show this number
int numOfBits = (int)(Math.log(myNum)/Math.log(2)) + 1;
return getGreyCode(myNum, numOfBits);
}
И проверить это, вы можете назвать его одним из следующих способов:
System.out.println("Grey code for " + 7 + " at n-bit: " + getGreyCode(7));
System.out.println("Grey code for " + 7 + " at 5-bit: " + getGreyCode(7, 5));
Или перебрать все возможные комбинации серых кодов до го-бит:
for (int i = 1; i <= 4; i++) {
for (int j = 0; j < Math.pow(2, i); j++)
System.out.println("Grey code for " + j + " at " + i + "-bit: " + getGreyCode(j, i));
Надеюсь, что это поможет людям!
Возможный дубликат [Матрица заполнения с двоичными числами, обычная и серая кодировка] (http://stackoverflow.com/questions/17652524/fill-matrix-with-binary-numbers-regular-and-gray-coded) – mbomb007