9
votes

OU des constantes Bitwise

En lisant une documentation ici , je suis tombé sur ceci: xxx

Je n'ai aucune idée de la façon dont cela fonctionne. Je lisa sur les opérateurs bitwises en C, mais je ne comprends pas comment vous pouvez installer trois constantes (ou plus!) À l'intérieur d'un INT et de la possibilité de les extraire de l'int? Creuser plus loin la documentation, j'ai également trouvé cela, ce qui est probablement associé: xxx

Comment est le (1 << 3) Déclarations / Variables travail? Je suis désolé si cela est trivial, mais quelqu'un pourrait-il s'il vous plaît éclairer en expliquant ou peut-être publier un lien vers une bonne explication?


4 commentaires

Cela ressemble à c-objectif? Est-ce mal étiquetée?


@Soapbox: L'exemple est vraiment pris de cacao, mais c'est vraiment droit C.


Cette deuxième ligne de code n'est pas C, non pas par un long shot.


@Soapbox: La deuxième ligne est vraiment pas pertinente à la question, cependant.


5 Réponses :


1
votes

Le numéro 1 est représenté comme 00000000000000000000000000000001 (1 << n) des moyens de décalage des 1 dans la représentation de 1 n positions vers la gauche Donc (1 << 3) serait 00000000000000000000000000001000 Dans un entier, vous pouvez avoir 32 options dont chacun peut être activé ou désactivé. Numéro de l'option n est le nième si le bit est égal à 1


0 commentaires

2
votes

Si vous regardez un numéro en binaire, chaque chiffre est sur ( 1 ) ou éteint ( 0 ).

Vous pouvez utiliser des opérateurs binaire pour définir ou interroger efficacement les bits individuels pour voir si elles sont définies ou non.

Prendre la valeur 8 bits 156. En binaire, c'est 10011100 .

Les bits définis correspondent aux bits 7 , 4 , 3 et 2 (valeurs 128 , 16 , 8 , 4 ). Vous pouvez calculer ces valeurs avec 1 << (position) assez facilement. Donc, 1 << 7 = 128 .


0 commentaires

0
votes

1 est fondamentalement la même chose que 2 à la puissance de y code>

Plus généralement, x est la même chose que x multipliée par 2 à la puissance y code>. p>

binaire x des moyens de déplacement de tous les bits du code x code> vers la gauche par y code> endroits, en ajoutant des zéros à la place des bits déplacés: p>

00010 p>

p>

1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
...


0 commentaires

12
votes

En fait, les constantes sont représentées par un simple bit, donc si vous avez un entier de 32 bits, vous pouvez adapter à 32 constantes en elle. Vos constantes doivent être des puissances de deux, de sorte qu'ils ne prennent qu'un seul bit "ensemble" pour représenter

Par exemple:. P>

if (options & CONSTANT_3)
{
    // CONSTANT_3 is set
}


0 commentaires

0
votes

<<< / code> est l'opérateur de changement de vitesse gauche, il déplace les bits du premier opérande laissé par le nombre de positions spécifiées dans l'opérande droit (avec des zéros entrant dans les positions décalées de la droite).

Dans votre enum, vous vous retrouvez avec des valeurs que EACG a un bit différent de 1, alors lorsque vous construisez quelque chose comme UnitDate , vous pouvez découvrir ultérieurement les indicateurs qu'il contient à l'aide du & opérateur, par exemple UnitDate & NSMONTHCALENDARUNIT == NSMONTHCALENDARUNIT sera vrai.


0 commentaires