web-dev-qa-db-fra.com

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

Si j'ai un octet, comment la méthode chercherait-elle à 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.

41
Glen654
public byte getBit(int position)
{
   return (ID >> position) & 1;
}

Si vous décalez l’ID par position, le bit est placé à l’endroit le plus à droite du nombre. En combinant cela avec AND AND & au niveau du bit avec 1, vous saurez si le bit est activé.

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.
82
Hunter McMillen

Vous voulez faire un peu masque et faire bitwise et. Cela finira par ressembler beaucoup à ce que vous avez - utilisez shift pour définir le bit approprié, utilisez & pour effectuer une opération bit à bit.

Alors

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

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

7
Charlie Martin

pour obtenir le nième bit en entier

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

En Java, cela fonctionne bien:

if (value << ~x < 0) {
   // xth bit set
} else {
   // xth bit not set
}

value et x peuvent être int ou long (et n'ont pas besoin d'être identiques).

Mise en garde pour les programmeurs non-Java : l'expression précédente fonctionne en Java car, dans cette langue, les opérateurs de décalage de bit ne s'appliquent qu'aux bits 5 (ou 6, dans le cas de long) de l'opérande de droite. Ceci traduit implicitement l'expression en value << (~x & 31) (ou value << (~x & 63) si value est long).

Javascript : cela fonctionne aussi en javascript (comme en Java, seuls les 5 bits les plus bas du compte de décalage sont appliqués). En javascript, toute variable number est 32 bits.

En particulier en C, le nombre d'équipes négatives appelle un comportement indéfini, de sorte que ce test ne fonctionnera pas nécessairement (bien que cela puisse arriver, selon votre combinaison particulière de compilateur/processeur).

0
rslemos