Bitfeld – Wikipedia

before-content-x4

Dans les technologies de l’information et la programmation Bitfeld Un entier sans signe dans lequel des bits ou des groupes de bits individuels sont regroupés. Il représente un type de type de données composite au niveau des bits. En revanche, le type de données primitif est dans lequel la valeur est formée à partir de tous les endroits.

after-content-x4

Une utilisation répandue est celle dans laquelle chaque position binaire individuelle représente un drapeau. Chaque point correspond à une variable booléenne. Cependant, plusieurs endroits peuvent également former une valeur, par ex. B. Deux amuse-gueules peuvent également être résumés dans un octet ou, comme avec les adresses IPv4, un mot de données 32 bits dans (par exemple) un réseau 24 bits et une partie hôte 8 bits.

Il y a aussi la façon de parler “bitvector” sans toujours exprimer que le bit individuel peut être traité par indexation. L’indexation des bits est traitée dans la chaîne bit de l’article.

Les champs de bits sont généralement utilisés dans la programmation matérielle ou système. Ici, ils servent souvent à définir certains comportements dans des dispositifs périphériques. En effet, par exemple, l’activation d’une certaine fonctionnalité dans le matériel peut facilement être signalée en définissant une seule ligne de données, un peu. Afin de communiquer plus facilement avec le logiciel ou d’autres appareils ou parce que, par exemple, les ports d’E / S ne sont disponibles qu’en un montant limité, plusieurs de ces lignes sont ensuite résumées en un mot de données, le bitfeld.

De plus, des champs de bits sont également utilisés pour la programmation des applications, où une variété de paramètres doivent être remises. Ici, la lisibilité du code source peut être améliorée si au lieu d’une longue liste de paramètres, dans laquelle chaque paramètre doit être explicitement spécifié, seul un champ Bit est assemblé avec les drapeaux souhaités.

L’utilisation de champs de bits pour économiser de l’espace de stockage n’a pas autant de sens dans la programmation d’applications de nos jours, sauf dans de rares cas, tels que. B. pour les systèmes intégrés lorsque la mémoire est une ressource extrêmement serrée, ou si les bits sont nécessaires en nombre extraordinairement élevé comme pour le tamis des eratoshenes. [d’abord] Un octet ou un mot entier est généralement utilisé pour les variables Boolesche. L’accès aux bits individuels d’un mot de données est souvent plus inefficace que l’ensemble du mot de données.

Exemple dans OpenGL [ Modifier | Modifier le texte source ]]

Dans OpenGL, par exemple, la fonction est glclear défini qui supprime un ou plusieurs des quatre tampons graphiques. Les développeurs auraient maintenant pu définir quatre paramètres, qui spécifient chacun si le tampon graphique doit être supprimé ou non. L’appel de fonction ressemblerait à la suivante:

after-content-x4
 annuler  glclear ( d'abord ,  d'abord ,  0 ,  0 ));  

Cependant, cela n’est ni efficace car quatre variables doivent être remises, ni très lisibles. Par conséquent dans le GL.H A So-appelé pour chaque tampon drapeau nommé Sont définis:

 #define gl_depth_buffer_bit 0x00000100   #define gl_accum_buffer_bit 0x00000200   #define GL_STROCH_BUFFER_BIT 0x00000400   #define gl_color_buffer_bit 0x00004000  

Et un seul paramètre a été défini pour la fonction:

 annuler  glclear ( Glbitfield  masque ));  // Glbitfield est un typedef sur int  

L’appel de fonction ressemble maintenant à ceci:

 glclear ( Gl_color_buffer_bit  |  Gl_depth_buffer_bit ));  

Utiliser en C et C # [ Modifier | Modifier le texte source ]]

Dans le langage de programmation C, il est possible de définir Bitfelder dans les structures de données et donc de sauver de plus petits types de données compacts. Tant que les données sont traitées exclusivement via les noms de champ, le code source ne devient pas dépendant du compilateur ou du processeur. Cela ne s’applique pas à l’accès à des parties de registres ou aux données désérialisées.

 structure  structure - taper - nom  {   taper  [ nom1 ]]  :  longueur ;   taper  [ nom2 ]]  :  longueur ;   // ...   taper  [ des noms ]]  :  longueur ;   }  variable - liste ;  

Dans le langage de programmation C #, il utilise le Attribut de drapeaux possible de déclarer une énumération en tant que bitfeld. [2] Le .NET Framework fournit également la structure de données Bitarray Disponible, qui stocke les bits individuels compacts et permet des opérations booléennes.

Accès à un seul bit, à la fois dans un test et à régler, le matériel prend en charge ainsi que l’accès à un octet ou à un mot – une seule commande est suffisante pour de nombreuses machines. Cependant, le support des compilateurs est souvent similaire à l’accès à plusieurs bits, dans lequel le groupe de bits doit être “préparé” avant de comparer ou de manipuler par un peu de masque du mot de mémoire. Quand Mât de bitch sont référés aux champs de bits, dont les points ne représentent aucune information, mais qui sont utilisés pour lire ou manipuler les champs de bits.

Un exemple de bidmaske est l’écart de masque de réseau dans la technologie du réseau. Il détermine laquelle des principaux bits d’une adresse IP est le préfixe du réseau, i. H. qui adresse la zone comme interne et qui est considérée comme un réseau externe lors du routage.

Bit leet [ Modifier | Modifier le texte source ]]

Afin de lire un ou plusieurs bits d’un Bitfeld, il est lié à un peu de masque sur l’amer et l’opération. Dans le massask, il y a un “0” à tous les points qui ne doit pas être pris en considération. Ces zones sont cachées par le lien et, c’est-à-dire H. réglé sur zéro. Les endroits qui doivent être visualisés ou lus contiennent un “1” dans le masking et sont donc repris du bitfeld.

Exemple

1 bits:

0100 d'abord 011 Bitfeld
Et 0000 d'abord 000 Bittaske
------------------------------------
= 0000 d'abord 000 résultats 

0 bits:

01101 0 11 Bitfeld
Et 00000 d'abord 00 Bitmaske
------------------------------------
= 00000 0 00 Résultat 

Le résultat est zéro si les positions du Bitmask dans le Bitfeld sont également nulles. Si au moins l’un d’entre eux est défini sur “1”, les bits correspondants sont également “1”, d. H. Le résultat est beaucoup nul.

Puisque les valeurs de zéro dans la plupart des langages de programmation à un logique FAUX et les valeurs sont beaucoup nul à un logique vrai Pour être évalué, le résultat peut désormais être facilement vérifié avec une branche conditionnelle si l’un des bits du bidmaske a été réglé sur le terrain:

si  ( Résultat )   // ensembles de bits  autre   // Bit pas réglé  

Bit [ Modifier | Modifier le texte source ]]

Si les bits dans le Bitfeld doivent prendre une certaine valeur, les endroits correspondants dans le bitfeld doivent être définis sur “1” et tout le monde sur “0”. Afin de mettre les endroits sur “1”, le Bitfeld doit être ajouté au bitmask ou lié ou lié via un amer. À l’inverse, vous obtenez un “0” dans les endroits souhaités si vous liez le champ et que vous masquez sur un NAND, c’est-à-dire d’abord inversez le masque, puis liez-le au champ.

Exemple

Définissez des bits sur “1”:

01101 0 11 Bitfeld
Ou 00000 d'abord 00 Bitmaske
------------------------------------
= 01001 d'abord 11 Résultat 

Définir les bits sur “0”:

Pas 0000 d'abord 000 Bittaske
------------------------------------
= 1111 0 111 bitmask inversé
Et 0100 d'abord 011 Bitfeld
-------------
= 0100 0 011 Résultat 

Interrupteur [ Modifier | Modifier le texte source ]]

Si les bits individuels devraient changer ( Anglais pour basculer ) ou sont inversés, les endroits correspondants dans le massask Bitmask sont placés sur “1” et tout le monde sur “0” et Bitfeld et Bitmaske liés via un exclusif ou.

01101 01 1 information
XOR 00000 11 0 Bitmaske
------------------------------------
= 01001 dix 1 résultat 

Résumer les massass [ Modifier | Modifier le texte source ]]

Les masques de bits peuvent être résumés, par ex. B. Pour vérifier ou régler plusieurs bits à la fois dans une opération. Pour ce faire, additionnez uniquement les masques de bits individuels ou liez-les via un amer ou.

0000000 d'abord Bitchmaske1
Ou 000000 d'abord 0 bitsaze2
------------------------------------
    000000 11 bitmask résumé 
  1. L’utilisation de champs de bits de toute expansion et avec une variable d’index est traitée plus en détail dans la chaîne de bit d’article.
  2. http://msdn.microsoft.com/de-de/library/system.flagsattribute.aspx
after-content-x4