2015-03-03 4 views
0

Если бы вопрос возник недавно, а именно: напишите алгоритм преобразования десятичного числа в n-разрядный серый код.Преобразовать десятичный код в серый код в java

Так, например: Используя 1-бит (простейший):

0 -> 0 
1 -> 1 

Использование 2-битовое

0 -> 00 
1 -> 01 
2 -> 11 
3 -> 10 

с использованием 3-битного

0 -> 000 
1 -> 001 
2 -> 011 
3 -> 010 
4 -> 110 
5 -> 111 
6 -> 101 
7 -> 100 
+0

Возможный дубликат [Матрица заполнения с двоичными числами, обычная и серая кодировка] (http://stackoverflow.com/questions/17652524/fill-matrix-with-binary-numbers-regular-and-gray-coded) – mbomb007

ответ

0

писал и Я бы поделился этим, так как я не вижу много реализаций 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)); 

Надеюсь, что это поможет людям!

+3

Почему бы не использовать shift left вместо 'Math.pow (2, ...)'? – RealSkeptic

+0

Это, наверное, худший фрагмент кода, который я когда-либо видел в SO ... 'new Double (Math.pow (2, (numOfBits))). IntValue()' должен быть '(int) Math.pow (2, numBits) ',' <= Math.pow (2, i) - 1' совпадает с ' Clashsoft

+2

Это буквально так же просто, как 'x^(x >> 1)'. Что это за вещи? – harold

Смежные вопросы