2010-04-12 33 views
5

Hola quiero convertir un entero largo a binario pero el problema es que quiero un resultado binario fijo de 16 bits después de la conversión, como si convirtiera 2 a 16 bits binarios, debería darme 0000000000000010, ¿cómo puedo ayudarme alguien?¿Cómo convertir una cadena binaria de 16 bits de longitud fija a una de longitud fija?

+2

¿Es un 'string' de 1s y 0s que quieres como salida? – uckelman

+1

16 bits no es un número entero muy largo ... – Thilo

+0

solo necesita enteros no negativos ¿no? – Thilo

Respuesta

0

Binario es una representación y no un formato para convertir un número entero. Por ejemplo, si usted tiene un entero:

int i = 2; 

La representación binaria será 00000010. Java ha firmado sólo enteros, por lo que este link será útil.

19

más probable es que lo que quiere es Integer.toBinaryString(), combinado con algo para asegurar que se obtiene exactamente 16 lugares:

int val = 2; 
String bin = Integer.toBinaryString(0x10000 | val).substring(1); 

La idea aquí es conseguir que el relleno de ceros por poner un 1 en el lugar 17 de su valor, y luego use String.substring() para cortar el primer 1 que esto crea, por lo tanto, siempre le dará exactamente 16 dígitos binarios. (Esto funciona, por supuesto, solo cuando está seguro de que la entrada es un número de 16 bits).

+2

¡Buen truco! +1! – polygenelubricants

+1

Mi mal. Vi 16 bits y estaba pensando en abreviar. ¿Acepte mi disculpa? FYI, val corto = -1; String bin = Integer.toBinaryString (0x10000 | val) .substring (1); es lo que no funcionará. –

+0

NP. Sí, eso definitivamente no funcionará si comienzas con un corto negativo. – uckelman

1

Integer.toBinaryString convertirá un int en su representación binaria como una cadena.

No le da ceros a la izquierda, por lo que si realmente necesita la cuerda para tener esos y ser de 16 bits, puede agregarlos usted mismo.

Usted debe saber cómo hacerlo.


tenga en cuenta que un int es en realidad 32 bits en Java. También debería saber cómo funciona el complemento a dos. La representación binaria de -1, por ejemplo, es 32 1 s.

4

Supongo que quiere una salida de cadena de longitud fija (16). Esto es lo que el código se vería así:

String binarized = Integer.toBinaryString(i); 
int len = binarized.length(); 
String sixteenZeroes = "00000000000000000"; 
if (len < 16) 
    binarized = sixteenZeroes.subString(0, 16-len).concat(binarized); 
else 
    binarized = binarized.subString(len - 16); 
return binarized; 

Advertencia: No compilar o bien puede hacerlo, por lo que asegurarse de que ningún error es allí :)

+2

Según tengo entendido, no ejecutar el código está bien, siempre y cuando demuestres que es correcto. – msandiford

0

si desea que la representación binaria de un largo, a continuación, hay un método en el largo objet hacerlo:

String Long.toString(long i, int radix); 

con una base de 2, usted debe tener una representación binaria.

respecto
Guillaume

1

en términos de un algoritmo para convertir números Base10 a binario, yo personalmente creo que la siguiente es bastante sencillo:

char[] array; 

for (i; i < 16; i++) 
{ 
    if (yourNumber % 2 == 0) 
      array[16-i] = '0'; 
    else if (yourNumber % 2 == 1) 
      array[16-i] = '1'; 
    yourNumber = yourNumber/2; 
} 

A continuación, puede convertir su matriz de caracteres en una cadena Si te gusta.

3

En contraste con muchas sugerencias aquí: Integer.toBinaryString, no funciona para un 16 bit (un corto) y no imprimirá ceros a la izquierda. La razón es que (como su nombre indica) esto solo funcionará para enteros. Y para números negativos, la representación del bit cambiará (el primer bit indica un número negativo).Los dos números a continuación representan el mismo número en abreviado e int. Entonces, si quiere representar los bits crudos que ha recibido (esta es la aplicación general de su problema), esta función generará resultados extraños.

decimal: -3 
short:      1111 1111 1111 1101 
int: 1111 1111 1111 1111 1111 1111 1111 1101 

EDIT: Se ha cambiado el número anterior

Por lo tanto no se puede emitir el resumen, si usted está interesado en el bit.

Java no facilita la aplicación a corto, por lo que tendrá que proporcionar su propia. Algo como esto (el tamaño es el número de bits):

int displayMask = 1 << (size - 1); 
StringBuffer buf = new StringBuffer(size); 
for (int c = 1; c <= size; c++) 
{ 
    buf.append((value & displayMask) == 0 ? '0' : '1'); 
    value <<= 1; 
} 
+1

Esos dos no son los mismos números. ¿De qué estás hablando? – polygenelubricants

+0

Tiene razón, usé la representación de bit incorrecta. Actualizaré los números. – Thirler

+0

No necesita todo eso. 'decimal corto = -3; String s = Integer.toBinaryString (0xFFFF y decimal); 'producirá el correcto' 1111111111111101'. –

1

tuve que hacerlo por un número de 32 bits y terminó con:

String stringWord = Long.toBinaryString(word); 
while (stringWord.length() < 32) // ensure that length of word is 32 
     stringWord = "0" + stringWord; 
Cuestiones relacionadas