recursivo programacion para matrices hexadecimal convertir como codigo calculadora binario binaria java algorithm matrix binary gray-code

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