¿Cómo se puede leer un número entero poco a poco en Java?

Me gustaría tomar un int como entrada y devolver el k-ésimo bit.

int getBit(int n, int k){
    return kth bit in n;
}

¿Cómo haría esto?

preguntado el 03 de enero de 13 a las 19:01

5 Respuestas

Usando operadores bit a bit:

int getBit(int n, int k) {
    return (n >> k) & 1;
}

Explicación (en bits):

n
100010101011101010 (example)
n >> 5
000001000101010111 (all bits are moved over 5 spots, therefore
&                   the bit you want is at the end)
000000000000000001 (0 means it will always be 0,
=                   1 means that it will keep the old value)
1

Respondido 18 Oct 15, 16:10

esto comienza desde el bit menos significativo como el bit 0, ¿verdad? - user1921187

@ user1921187 Sí, lo es. getBit(0b10001, 0) volvería 1y getBit(0b10001, 1) volvería 0. - tckmn

bueno, si ejecuto getBit(n, 0), obtendría el segundo bit desde la derecha. Entonces k=2 en realidad me daría el bit menos significativo, por lo que es el bit 0. ¿Estoy viendo algo mal? - user1921187

@ user1921187 Lo siento, edité mi comentario. No estaba pensando :P Si corriste getBit(n, 0), obtendrías el último bit. - tckmn

Respuesta válida. Solo otro pensamiento sobre esto es, desplazar a la izquierda 1 por k veces y verificar. n & (1 << k) - Durja

return (n >> k) & 1;

Aquí, n >> k cambia el k-th bit en la posición menos significativa, y & 1 enmascara todo lo demás.

Respondido el 03 de enero de 13 a las 19:01

Si el bit significativo más bajo es el número de bit 0:

return (n>>k)&1;

Respondido el 03 de enero de 13 a las 19:01

o usar:

boolean getBit(int n, int k) {
    return ((n >> k) & 1) == 1;
}

si quieres un valor booleano

Respondido el 22 de Septiembre de 20 a las 12:09

También puede usar la propiedad del módulo para esto. Si su número es par, el bit significativo más bajo es cero; de lo contrario, (impar) es uno.

return (n>>k)%2;

Respondido 05 Jul 17, 23:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.