50 votes

Que signifie l'opérateur "<<" en C #?

J'étais en train de faire de la programmation audio de base en C # en utilisant le paquet NAudio et je suis tombé sur l'expression suivante. Je n'ai aucune idée de ce que cela signifie, car je n'ai jamais vu l'opérateur << être utilisé auparavant. Alors qu'est-ce que << signifie?

S'il vous plaît donner une explication rapide de cette expression.

 short sample = (short)((buffer[index + 1] << 8) | buffer[index + 0]);
 

74voto

serhio Points 9649

Définition

Le décalage vers la gauche de l'opérateur (<<) quarts de son premier opérande de gauche par le nombre de bits spécifié par son deuxième l'opérande. Le type de la deuxième opérande doit être un int. Opérateur<< MSDN (Référence C#) alt text

Pour les nombres binaires, c'est une opération au niveau du bit qui décale tous les bits de son opérande; tous les bits de l'opérande est simplement déplacé un certain nombre de positions de bits, et la vacance de bits postes sont remplis.

L'utilisation de la

L'arithmétique des changements peut être utile comme un moyen efficace d'effectuer la multiplication ou la division de nombres entiers signés par des puissances de deux. Décalage à gauche par n bits sur un signé ou non signé nombre binaire a pour effet de multiplier par 2n. Décalage à droite par n bits sur un complément à deux signé nombre binaire a pour effet de diviser par 2n, mais il est toujours arrondi vers le bas (vers l'infini négatif). C'est différent de la façon dont l'arrondi est généralement fait en entier signé de la division (qui arrondit à 0). Cet écart a conduit à des bugs en plus d'un compilateur.

Une autre utilisation est de travailler avec les bits de couleur. Charles Petzold Fondations de l'article "les Bitmaps Et les Pixels Bits" montre un exemple de << lorsque vous travaillez avec des couleurs:

ushort pixel = (ushort)(green << 5 | blue);

8voto

Benjamin Podszun Points 5120

Décaler à gauche (et la contrepartie, Décaler à droite) déplace les bits dans la direction indiquée.

Décalage gauche est plus ou moins 2 fois, mais plus rapide

Le décalage à droite est plus ou moins divisé par 2, mais plus rapide

7voto

mletterle Points 2607

C'est une opération de décalage à gauche, un langage de programmation TRÈS courant: http://en.wikipedia.org/wiki/Arithmetic_shift

4voto

missingfaktor Points 44003

C'est ce qu'on appelle l'opérateur de gauche.

Suivez ce lien pour des informations plus détaillées.

3voto

Leonardo Herrera Points 4079

L'opérateur au niveau du bit a déjà été expliqué tout à fait à quelques reprises déjà. Disons qu' buffer[0] contient de 1, buffer[1] contient 2 et index de 0 et de remplacer ces valeurs:

short sample = (short)((buffer[1] << 8) | buffer[0]);
short sample = (short)((1 << 8) | 2);

Maintenant, un semi-représentation graphique. C'est le chiffre 1 dans une représentation binaire:

0000 0001

Décalage de huit positions de la gauche serait de faire de ce numéro de "dépassement" à partir d'un seul octet. Cependant, le compilateur est assez intelligent pour nous donner plus de place.

0000 0001 0000 0000

Maintenant, la partie droite: le numéro 2 ressemble à cela en binaire:

0000 0010

Et l'opérateur " | " (or au niveau du bit) en fait il suffit de mettre la deux valeurs et la comparaison bit par bit.

  0000 0001 0000 0000
| 0000 0000 0000 0010
= 0000 0001 0000 0010

Et la dernière valeur est stockée dans votre "exemple" de la variable (dans ce cas, 258.) L'opération inverse est similaire:

buffer[0] = sample & 255;
buffer[1] = (sample & (255 << 8)) >> 8;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X