int func(int8_t byteFlag,int whichBit){if(whichBit >0&& whichBit <=8)return(byteFlag &(1<<(whichBit-1)));elsereturn0;}
Maintenant func(byteFlag, 1) sera de retour 1 st bits de LSB. Vous pouvez passer 8 comme whichBit pour obtenir 8 bits (MSB).
<< est un décalage à gauche de conditionnement opérant. Il va changer la valeur 1 à l'endroit approprié et puis nous avons à faire & opération pour obtenir la valeur de ce particual peu dans byteFlag.
pour func(75, 4)
75->010010111->000000011<<(4-1)->00001000//means 3 times shifting left
75 & (1 << (4 - 1)) va nous donner 1.
Merci! Je ne pouvais pas upvote pour l'instant 🙁 Pourriez-vous nous donner plus d'explications à propos de 1 << (whichBit-1)? par exemple, si whichBit est de 3, ce qui ne 1 << 2 faire? Je comprends que << est le décalage à gauche mise à jour de ma réponse Merci beaucoup raja! Très utile : ) Aller à travers les en.wikipedia.org/wiki/Mask_%28computing%29 pour bitmasking. La sortie de cet dépendent du processeur de l'endianness, ou est-il toujours en big endian?
Techniquement, c'est le dernier morceau que vous obtenez 😛 int8_t est garantie 1 octet de la taille. non, il y a différentes conventions sur la numérotation des bits. Je dirais au moins 1 octet de la taille. Il semble que vous juste besoin de savoir un peu plus sur le décalage de bits: cprogramming.com/tutorial/bitwise_operators.html
Maintenant
func(byteFlag, 1)
sera de retour 1 st bits de LSB. Vous pouvez passer8
commewhichBit
pour obtenir 8 bits (MSB).<<
est un décalage à gauche de conditionnement opérant. Il va changer la valeur1
à l'endroit approprié et puis nous avons à faire&
opération pour obtenir la valeur de ce particual peu dansbyteFlag
.pour
func(75, 4)
75 & (1 << (4 - 1))
va nous donner1
.mise à jour de ma réponse
Merci beaucoup raja! Très utile : )
Aller à travers les en.wikipedia.org/wiki/Mask_%28computing%29 pour bitmasking.
La sortie de cet dépendent du processeur de l'endianness, ou est-il toujours en big endian?
OriginalL'auteur rashok
Vous utilisez le & opérateur de.
Si par "premier bit" tu veux dire LSB:
Si par "premier bit" tu veux dire MSB:
int8_t
est garantie 1 octet de la taille.non, il y a différentes conventions sur la numérotation des bits.
Je dirais au moins 1 octet de la taille.
Il semble que vous juste besoin de savoir un peu plus sur le décalage de bits: cprogramming.com/tutorial/bitwise_operators.html
OriginalL'auteur itsme86
Juste masque binaire élevé
Un autre truc, car c'est un signé int
Le dernier fonctionne en raison de la représentation des nombres en complément à deux. Le haut-bit est défini si le nombre est négatif.
OriginalL'auteur Jesus Ramos
OriginalL'auteur Anton Kovalenko
La solution est donnée ci-dessous. Pour obtenir des bits de numéro de bit = 1;
OriginalL'auteur Sudhir Sinha