Ashutosh Singh:
Necesito ayuda para diseñar código java para generar la matriz de bits para cualquier entero dado en forma siguiente:
23
debe producir una salida como 1101011
explicación (min longitud de la matriz):
posiciones se dan como 1 -2 4 -8 16 -32 ....
Así 1101011
se puede evaluar como:
1*1 + 1*-2 + 0*4+ 1*-8 + 0*16 +1*-32 + 1*64 = 23
rplantiko:
Este es el llamado negabinary representación de los números (descrito por primera vez por Vittorio Grünwald en 1885). Ellos pueden ser codificados de una manera muy similar a la representación binaria de costumbre, solo se trabaja con -2 en lugar de 2 como base (código Java inspirado por el código C # en https://en.wikipedia.org/wiki/Negative_base ):
class EncodeNegaBinary {
public static void main(String[] args) {
int n=0,input=0;
String result="";
final String[] BITS = { "0","1" };
if (args.length != 1) {
System.err.println("Please enter an integer to be converted");
return;
} else {
input = n = Integer.parseInt(args[0]);
}
while (n != 0) {
int r = n%-2;
n /= -2;
if (r == -1) {
r=1;
n++;
}
result = BITS[r] + result;
}
System.out.printf( "%d -> %s\n", input, result);
}
}