Qu'est-ce que cela fait: “input >> 4 & 0x0F”?
Je ne comprends pas ce que ce code est en train de faire, quelqu'un pourrait-il expliquer cela?
long input; //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );
Grâce
OriginalL'auteur PseudoPsyche | 2012-09-20
Vous devez vous connecter pour publier un commentaire.
bitshifts l'entrée de 4 bits vers la droite, puis les masques par la baisse de 4 bits.
Prendre cet exemple 16 bits: (les points sont juste pour la séparation visuelle)
OriginalL'auteur Matthew
Qui est en train de faire un bit à bit décalage à droite le contenu de "l'entrée" de 4 bits, puis de faire un bit à bit ET du résultat avec 0x0F (1101).
Ce qu'il fait dépend du contenu et du type de "entrée". Est-il un int? Une longue? Une chaîne de caractères (ce qui signifie la maj et au niveau du bit ET sont en train d'être fait sur un pointeur vers le premier octet).
Google pour "c++ opérations bit à bit" pour plus de détails sur ce qui se passe sous le capot.
En outre, regarder C++ la priorité de l'opérateur parce que le C/C++ priorité n'est pas exactement la même que dans de nombreuses autres langues.
OriginalL'auteur Charles Burns
& est le niveau du bit ET de l'opérateur. "& 0x0F" est parfois utilisé pour compléter les 4 premiers bits avec des 0 ou ignorer le premier(à gauche) 4 bits une valeur.
0x0f = 00001111. Si un bit à bit & opération de 0x0f avec tout autre motif de bits ne conservera que les 4 bits les plus à droite, la compensation de la gauche 4 bits.
Si l'entrée a une valeur de 01010001, après avoir fait &0x0F, nous allons obtenir 00000001 - qui est un modèle que nous obtenons après compensation de la gauche 4 bits.
Tout comme un autre exemple, c'est un code que j'ai utilisé dans un projet:
Octet verflag = (Byte)(bIsAck & 0x0f) | ((version << 4) & 0xf0). Ici, je suis à la combinaison de deux valeurs dans un seul Octet de valeur pour économiser de l'espace parce qu'ils sont utilisés dans un en-tête de paquet de la structure. bIsAck est un BOOLÉEN et version est un Octet dont la valeur est très petite. Donc, ces deux valeurs peuvent être contenus dans un seul Octet variable.
La première grignoter dans la résultante de la variable contenant la valeur de la version et de la deuxième grignoter contiendra la valeur de bIsAck. Je peux récupérer les valeurs dans des variables séparées lors de la réception en faisant un 4 bits >> tout en prenant la valeur de la version.
Espère que c'est quelque part près de ce que vous avez demandé.
OriginalL'auteur Joe M