it-swarm-fr.com

Quels sont les avantages de l'utilisation des opérations bitwises?

Après avoir lu la dernière lettre d'information CodeProject, j'ai rencontré cet article sur les opérations bitwises . Cela fait de la lecture intéressante et je peux certainement voir le bénéfice de la vérification si un entier est pair ou impair, mais si le bit N-ème est défini? Qu'est-ce qui peut éventuellement être les avantages de cela?

19
billy.bob

Les opérations bitwises sont absolument essentielles lorsque la programmation des registres matériels dans des systèmes embarqués. Par exemple, chaque processeur que j'ai jamais utilisé a un ou plusieurs registres (généralement une adresse mémoire spécifique) qui contrôle si une interruption est activée ou désactivée. Pour permettre à une interruption de déclencher le processus habituel consiste à définir le bit d'activation pour ce type d'interruption tout en modifiant l'un des autres bits du registre.

Lorsqu'une interruption incendie, il définit généralement un peu dans un registre d'état de sorte qu'une routine de service unique puisse déterminer la raison précise de l'interruption. Tester les bits individuels permet un décodage rapide de la source d'interruption.

Dans de nombreux systèmes intégrés, le total RAM DISPONIBLE peut être 64, 128 ou 256 octets (octets non kilo-octets ni mégaoctets) dans cet environnement, il est courant d'utiliser un octet pour stocker plusieurs éléments de données, Les drapeaux booléens, etc., puis utilisent les opérations de bits pour les définir et les lire.

Je travaille depuis plusieurs années avec un système de communication par satellite où la charge utile du message est de 10,5 octets. Pour tirer le meilleur parti de ce paquet de données, les informations doivent être emballées dans le bloc de données sans laisser de bits inutilisés entre les champs. Cela signifie faire une utilisation intensive d'opérateurs bitwiswise et shift pour prendre les valeurs d'informations et les emballer dans la charge utile étant transmise.

27
uɐɪ

Fondamentalement, vous les utilisez en raison de la taille et des considérations de vitesse. Les opérations bit bits sont incroyablement simples et donc généralement plus rapides que les opérations arithmétiques. Par exemple, pour obtenir la partie verte d'une valeur RVB, l'approche arithmétique est (rgb / 256) % 256. Avec des opérations bitwises, vous feriez quelque chose comme (rgb >> 8) & 0xFF. Ce dernier est nettement plus rapide et une fois que vous êtes habitué, c'est aussi plus facile. Les opérations de manière générale des bits entrent en jeu lorsque vous devez coder/décoder des données de manière compacte et rapide.

7
back2dos

Ces types d'opérations sont souvent utilisées lors de la rédaction de systèmes embarqués où la mémoire ou la puissance de la CPU est restreinte.

Par exemple, pour économiser de l'espace, vous pouvez stocker plusieurs variables dans une seule variable d'int 8 bits en utilisant chaque bit pour représenter un booléen. Ensuite, vous avez besoin d'un moyen rapide de définir un bit spécifique ou de récupérer la valeur du bit.

Généralement, lors de la programmation dans des langages de niveau supérieur tels que C # sur un PC de bureau avec des gigaoctets de mémoire, vous ne vous souciez pas vraiment que chaque boolprend un octet complet . Mais si vous programmez un microcontrôleur en C avec 2 Ko de mémoire, chaque bit compte, la capacité de poder 8 bools dans un octet unique peut être critique.

4
Simon P Stevens

Les opérations bitwises sont également utilisées fréquemment dans les codecs vidéo et audio, pour la même raison que dans les composants électroniques intégrés; Être capable d'emballer cinq drapeaux et une temporisation de onze bits en une demi-int est très utile lorsque vous souhaitez créer un codec vidéo super-efficace.

En fait, MPEG 4 utilise même codage de golomb exponentielle pour des champs de longueur variable. Une valeur allant de 17 ou 19 bits de large dernier paquet pourrait être de trois ou cinq bits de large ce paquet - et vous voyez tout cela avec des opérations biteux.

3
Tacroy

Des astuces combinant des opérations logiques bitwiswise, des opérations de changement de bitwise et des opérations arithmétiques peuvent être comprises par des personnes qui ont étudié la construction d'un additionneur binaire utilisant des portes logiques (et, ou non). En dehors de ce cercle, il est très difficile de comprendre sans commentaire détaillé.

Il est utile lors de la programmation [~ # ~ # ~] SIMD [~ # ~] unités, surtout si l'architecture de la CPU avait intentionnellement oublié certaines instructions de SIMD car elles pouvaient être émulées par quelques autres.

Par exemple, l'architecture peut ne pas définir aucune instruction permettant de prendre les valeurs négatives d'un groupe de 16 octets, mais qui peut être émulée par des négociations binaire, puis l'ajout de 1 également, la soustraction peut également être omise, car elle peut être émulée en prenant le négatif du deuxième opérande. La disponibilité de la "route alternative" est la raison d'omettre certaines instructions.

De même, la SIMD ne peut supporter que l'addition parallèle 8 bits, sans mettre en oeuvre d'ajout pour des éléments plus larges tels que 16 bits, 32 bits ou 64 bits. Pour les imiter, il faut extraire le bit de signalisation du résultat de calcul de 8 bits, puis effectuez l'opération de repère sur l'élément suivant.

2
rwong