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));
}
où ID
est le nom de l'octet à partir duquel je récupère des informations.
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.
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) ;
où 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 .
pour obtenir le nième bit en entier
return ((num >> (n-1)) & 1);
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).