Maison Problème commun 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

Mar 11, 2019 pm 05:28 PM
c语言

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位
Copier après la connexion

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;
Copier après la connexion

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,最高位被丢弃
Copier après la connexion
.


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
Copier après la connexion

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
Copier après la connexion

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

C Structure des données du langage: représentation des données et fonctionnement des arbres et des graphiques C Structure des données du langage: représentation des données et fonctionnement des arbres et des graphiques Apr 04, 2025 am 11:18 AM

C Structure des données du langage: La représentation des données de l'arborescence et du graphique est une structure de données hiérarchique composée de nœuds. Chaque nœud contient un élément de données et un pointeur vers ses nœuds enfants. L'arbre binaire est un type spécial d'arbre. Chaque nœud a au plus deux nœuds enfants. Les données représentent StrustReenode {intdata; structTreenode * gauche; structureReode * droite;}; L'opération crée une arborescence d'arborescence arborescence (prédécision, ordre dans l'ordre et ordre ultérieur) Le nœud d'insertion de l'arborescence des arbres de recherche de nœud Graph est une collection de structures de données, où les éléments sont des sommets, et ils peuvent être connectés ensemble via des bords avec des données droites ou peu nombreuses représentant des voisins.

La vérité derrière le problème de fonctionnement du fichier de langue C La vérité derrière le problème de fonctionnement du fichier de langue C Apr 04, 2025 am 11:24 AM

La vérité sur les problèmes de fonctionnement des fichiers: l'ouverture des fichiers a échoué: les autorisations insuffisantes, les mauvais chemins de mauvais et les fichiers occupés. L'écriture de données a échoué: le tampon est plein, le fichier n'est pas écrivatif et l'espace disque est insuffisant. Autres FAQ: traversée de fichiers lents, encodage de fichiers texte incorrect et erreurs de lecture de fichiers binaires.

Comment produire un compte à rebours dans le langage C Comment produire un compte à rebours dans le langage C Apr 04, 2025 am 08:54 AM

Comment produire un compte à rebours en C? Réponse: Utilisez des instructions de boucle. Étapes: 1. Définissez la variable N et stockez le numéro de compte à rebours à la sortie; 2. Utilisez la boucle while pour imprimer en continu n jusqu'à ce que n soit inférieur à 1; 3. Dans le corps de la boucle, imprimez la valeur de n; 4. À la fin de la boucle, soustrayez N par 1 pour sortir le prochain plus petit réciproque.

C Programmation multithread du langage: Guide du débutant et dépannage C Programmation multithread du langage: Guide du débutant et dépannage Apr 04, 2025 am 10:15 AM

C Guide de programmation multithreading Language: Création de threads: Utilisez la fonction PTHREAD_CREATE () pour spécifier l'ID de thread, les propriétés et les fonctions de thread. Synchronisation des threads: empêchez la concurrence des données via des mutex, des sémaphores et des variables conditionnelles. Cas pratique: utilisez le multi-lancement pour calculer le numéro Fibonacci, attribuer des tâches à plusieurs threads et synchroniser les résultats. Dépannage: résoudre des problèmes tels que les accidents de programme, les réponses d'arrêt de fil et les goulots d'étranglement des performances.

CS-semaine 3 CS-semaine 3 Apr 04, 2025 am 06:06 AM

Les algorithmes sont l'ensemble des instructions pour résoudre les problèmes, et leur vitesse d'exécution et leur utilisation de la mémoire varient. En programmation, de nombreux algorithmes sont basés sur la recherche et le tri de données. Cet article présentera plusieurs algorithmes de récupération et de tri de données. La recherche linéaire suppose qu'il existe un tableau [20,500,10,5,100,1,50] et doit trouver le numéro 50. L'algorithme de recherche linéaire vérifie chaque élément du tableau un par un jusqu'à ce que la valeur cible soit trouvée ou que le tableau complet soit traversé. L'organigramme de l'algorithme est le suivant: Le pseudo-code pour la recherche linéaire est le suivant: Vérifiez chaque élément: Si la valeur cible est trouvée: return True return false C Implementation: # include # includeIntMain (void) {i

Concept de fonction de langue C Concept de fonction de langue C Apr 03, 2025 pm 10:09 PM

Les fonctions de langue C sont des blocs de code réutilisables. Ils reçoivent des entrées, effectuent des opérations et renvoient les résultats, ce qui améliore modulairement la réutilisabilité et réduit la complexité. Le mécanisme interne de la fonction comprend le passage des paramètres, l'exécution de la fonction et les valeurs de retour. L'ensemble du processus implique une optimisation telle que la fonction en ligne. Une bonne fonction est écrite en suivant le principe de responsabilité unique, un petit nombre de paramètres, des spécifications de dénomination et une gestion des erreurs. Les pointeurs combinés avec des fonctions peuvent atteindre des fonctions plus puissantes, telles que la modification des valeurs de variables externes. Les pointeurs de fonctions passent les fonctions comme des paramètres ou des adresses de magasin, et sont utilisées pour implémenter les appels dynamiques aux fonctions. Comprendre les fonctionnalités et les techniques des fonctions est la clé pour écrire des programmes C efficaces, maintenables et faciles à comprendre.

C Structure des données du langage: Le rôle clé des structures de données dans l'intelligence artificielle C Structure des données du langage: Le rôle clé des structures de données dans l'intelligence artificielle Apr 04, 2025 am 10:45 AM

C Structure des données du langage: Aperçu du rôle clé de la structure des données dans l'intelligence artificielle dans le domaine de l'intelligence artificielle, les structures de données sont cruciales pour traiter de grandes quantités de données. Les structures de données fournissent un moyen efficace d'organiser et de gérer les données, d'optimiser les algorithmes et d'améliorer l'efficacité du programme. Les structures de données courantes utilisées couramment les structures de données dans le langage C comprennent: les tableaux: un ensemble d'éléments de données stockés consécutivement avec le même type. Structure: un type de données qui organise différents types de données ensemble et leur donne un nom. Liste liée: une structure de données linéaire dans laquelle les éléments de données sont connectés ensemble par des pointeurs. Stack: Structure de données qui suit le dernier principe de premier-out (LIFO). File: Structure de données qui suit le premier principe de première sortie (FIFO). Cas pratique: le tableau adjacent dans la théorie des graphiques est l'intelligence artificielle

Dépannage des conseils pour le traitement des fichiers dans la langue C Dépannage des conseils pour le traitement des fichiers dans la langue C Apr 04, 2025 am 11:15 AM

Dépannage des conseils pour les fichiers de traitement du langage C Lors du traitement des fichiers dans le langage C, vous pouvez rencontrer divers problèmes. Les problèmes suivants sont des problèmes communs et des solutions correspondantes: Problème 1: Impossible d'ouvrir le code de fichier: fichier * fp = fopen ("myfile.txt", "r"); if (fp == null) {// ouverture de fichier a échoué} Raison: le fichier d'erreur de fichier Fichier ne existe pas sans la lecture de fichier Code de lecture de fichier: Charbuffer [100]; size_tread_bytes = Fread (tampon, 1, siz