programacion - convertir de binario a decimal recursivo java
Rellene la matriz con nĂºmeros binarios, regulares y codificados en gris (2)
Tengo una matriz que contiene 1: s o 0: s, creando números binarios. Su ancho es n. Para n = 2 yn = 3, se vería así:
00 000
01 001
10 010
11 011
100
101
110
111
y así. En este momento estoy usando el siguiente código para producir esto.
int row = (int) Math.pow(2, n);
int col = n;
int[][] matrix = new int[row][col];
for (int r = 0; r < row; r++) {
String binaryNumber = String.format("%" + n + "s", Integer.toBinaryString(r)).replace('' '', ''0'');
for (int c = col - 1; c >= 0; c--) {
matrix[r][c] = Integer.parseInt("" + binaryNumber.charAt(0));
binaryNumber = binaryNumber.substring(1);
}
}
Ahora necesito ayuda para crear lo mismo pero con código gris. ¿Hay una manera conveniente de hacer esto en Java? Además, si hay una manera más inteligente de hacer lo que hago arriba, me encantaría aprender.
Realmente no tengo ni idea de por dónde empezar, ya que estoy acostumbrado a tener a toBinaryString()
ayudándome. EDITAR: El código gris se verá así:
00 000
01 001
11 011
10 010
110
111
101
100
Puedes obtener el código gris simplemente cambiando
Integer.toBinaryString(r)
dentro
Integer.toBinaryString((r >> 1) ^ r)
.
Pruebalo:)
Esto debería hacerlo:
public class GrayCodeMatrix {
public static void main(String[] args) {
// set length (< Integer.SIZE)
final int grayCodeLength = 4;
// generate matrix
final int grayCodeCount = 1 << grayCodeLength; // = 2 ^ grayCodeLength
int grayCodeMatrix[][] = new int[grayCodeCount][grayCodeLength];
for (int i = 0; i < grayCodeCount; i++) {
int grayCode = (i >> 1) ^ i;
for (int j = grayCodeLength-1; j >= 0; j--) {
// extract bit
final int grayCodeBitMask = 1 << j;
grayCodeMatrix[i][j] = (grayCode & grayCodeBitMask) >> j;
}
}
// view result
for (int y = 0; y < grayCodeMatrix.length; y++) {
for (int x = 0; x < grayCodeMatrix[0].length; x++) {
System.out.print(grayCodeMatrix[y][x]);
}
System.out.print("/n");
}
}
}
EDITAR: SOLO FUNCIONA PARA grayCodeLength <Integer.SIZE