Maison  >  Article  >  Comment comprendre les opérateurs de décalage à gauche et à droite en langage C

Comment comprendre les opérateurs de décalage à gauche et à droite en langage C

清浅
清浅original
2019-03-11 17:28:2256348parcourir

Le décalage vers la gauche en langage C représente l'opérateur de décalage vers la gauche, ce qui signifie supprimer le bit le plus élevé et remplir le bit le plus bas avec 0 tandis que le décalage vers la droite en langage C est l'algorithme de décalage vers la droite, qui est l'opposé de la gauche ; Shift. Il se déplace de quelques places vers la droite.

Comment comprendre les opérateurs de décalage à gauche et à droite en langage C

Utilisation des opérateurs de décalage à gauche et à droite en langage C : l'opérateur de décalage à gauche supprime le bit le plus élevé et ajoute 0 au bit de décalage à droite le plus bas ; est l'opposé du décalage à gauche. Il se déplace de quelques bits vers la droite

Les opérateurs de décalage à gauche et à droite en langage C sont des opérateurs en langage C. Ensuite, nous vous les présenterons en détail dans l'article. . Comment utiliser ces deux opérateurs a une certaine valeur de référence. J'espère que cela sera utile à tout le monde

[Cours recommandés : Tutoriel du langage C

Parlons d'abord du décalage à gauche. Le décalage à gauche consiste à déplacer tous les bits d'un nombre vers la gauche d'un certain nombre de places. C. Par exemple :

int i = 1;
i = i << 2;  //把i里的值左移2位

En d'autres termes, la représentation binaire de 1 est 000...0001 (le nombre de 0 devant 1 ici est lié au nombre de chiffres dans int, Machine 32 bits, dans gcc il y a 31 zéros). Après avoir décalé 2 bits vers la gauche, cela devient 000...0100, soit 4 en décimal. Par conséquent, décaler 1 bit vers la gauche équivaut à multiplier par 2. Ensuite, le décalage de n bits vers la gauche est n fois 2. (Les nombres signés ne sont pas entièrement applicables, car le décalage vers la gauche peut entraîner un changement du signe. La raison est expliquée ci-dessous)
Un problème qui nécessite une attention particulière est que le bit de signe et le décalage de l'extrémité m ne sont pas signalés sur le bus le plus à gauche de la situation Out. Nous savons que int est un entier signé et que le bit le plus à gauche est le bit de signe, qui est 0 positif et 1 négatif. se produira lors du décalage, par exemple :

int i = 0x40000000; //16进制的40000000,为2进制的01000000...0000
i = i << 1;

Ensuite, après que i soit décalé vers la gauche de 1 bit, il deviendra 0x80000000, soit 100000...0000 en binaire Le signe. Le bit est défini sur 1 et les autres bits sont tous 0, devenant ainsi le type int. La valeur minimale représentée par l'int de 32 bits est -2147483648, ce qui est un débordement. Que se passera-t-il si i est ensuite décalé vers la gauche. 1 bit ? En langage C, le bit le plus élevé est supprimé. Après avoir supprimé 1, la valeur de i devient 0.
Un cas particulier en décalage à gauche est celui où le nombre de chiffres décalés vers la gauche dépasse le nombre maximum de chiffres. du type numérique, le compilateur utilisera le nombre de chiffres décalés vers la gauche pour modulo le nombre maximum de chiffres du type, puis décalera en fonction du reste, comme :

int i = 1, j = 0x80000000; //设int为32位
i = i << 33;   // 33 % 32 = 1 左移1位,i变成2
j = j << 33;   // 33 % 32 = 1 左移1位,j变成0,最高位被丢弃
.


Lors de la compilation de ce programme avec gcc, le compilateur donnera un avertissement indiquant que le nombre de chiffres de décalage vers la gauche> ;= longueur du type Donc en fait, i et j sont déplacés de 1 bit, ce qui est le reste. après 33%32. C'est la règle sous

gcc. Il n'est pas encore clair si les autres compilateurs sont les mêmes.

En bref, le décalage à gauche signifie : rejeter le bit le plus élevé. et remplissez le bit le plus bas avec 0

Parlons du décalage à droite Si vous comprenez le principe du décalage à gauche, alors le décalage à droite sera plus facile à comprendre.

Le concept de décalage à droite est opposé. à celui du décalage à gauche, qui consiste à déplacer quelques bits vers la droite. L'opérateur est >>.

Le bit de signe du décalage à droite est différent de celui du décalage à gauche Par exemple, pour int. tapez, le décalage à droite gardera le bit de signe inchangé, par exemple :

int i = 0x80000000;
i = i >> 1;  //i的值不会变成0x40000000,而会变成0xc0000000

C'est-à-dire qu'une fois le bit de signe déplacé vers la droite, les nombres positifs seront complétés par 0, et les nombres négatifs seront complétés par 1, c'est-à-dire qu'il s'agit du décalage arithmétique vers la droite en langage assembleur. De même, lorsque le nombre de bits déplacés dépasse la longueur du type, le reste sera pris, puis le reste sera déplacé.

负数10100110 >>5(假设字长为8位),则得到的是  11111101

En bref, en C, le décalage à gauche est un décalage logique/arithmétique à gauche (les deux sont exactement les mêmes), et le décalage à droite est un décalage arithmétique à droite, ce qui va gardez le bit de signe inchangé. Dans les applications réelles, vous pouvez utiliser le décalage gauche/droite pour effectuer des opérations de multiplication/division rapides en fonction de la situation, ce qui sera plus rapide que l'efficacité du cycle est beaucoup plus élevée

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn