52 votes

Comment obtenir la valeur d'un bit à une certaine position à partir d'un octet ?

Si j'ai un octet, à quoi ressemblerait la méthode pour récupérer un peu à une certaine position ?

Voici ce que je sais, et je ne pense pas que cela fonctionne.

 public byte getBit(int position) {
    return (byte) (ID >> (position - 1));
}

ID est le nom de l'octet à partir duquel je récupère des informations.

113voto

Hunter McMillen Points 17717
public byte getBit(int position)
{
   return (ID >> position) & 1;
}

Le décalage vers la droite de l'ID par position place le bit #position à l'endroit le plus à droite du nombre. La combinaison de cela avec le AND au niveau du bit & avec 1 vous dira si le bit est défini.

 position = 2
ID = 5 = 0000 0101 (in binary)
ID >> position = 0000 0001

0000 0001 & 0000 0001( 1 in binary ) = 1, because the furthest right bit is set.

10voto

Charlie Martin Points 62306

Vous voulez faire un peu de masque et faire au niveau du bit et. Cela finira par être très proche de ce que vous avez - utilisez shift pour définir le bit approprié, utilisez & pour faire une opération au niveau du bit.

Donc

  return ((byte)ID) & (0x01 << pos) ;

pos doit être compris entre 0 et 7. Si vous avez le bit le moins significatif comme "bit 1", vous avez besoin de votre -1 mais je vous le déconseille -- ce genre de changement de position est toujours une source d'erreurs pour moi.

2voto

src3369 Points 1121

pour obtenir le nième bit en entier

  return ((num >> (n-1)) & 1);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X