La partie pertinente de la norme (ISO/IEC 9899:1999) est 6.7.2.1 #4:
Un peu de champ doit avoir un type qui est qualifié ou non qualifié
la version de _Bool, signé int, unsigned int, ou certains autres de la mise en œuvre définies par l'
type.
struct{/* field 4 bits wide */unsigned field1 :4;/*
* unnamed 3 bit field
* unnamed fields allow for padding
*/unsigned:3;/*
* one-bit field
* can only be 0 or -1 in two's complement!
*/signed field2 :1;/* align next field on a storage unit */unsigned:0;unsigned field3 :6;}full_of_fields;
Que vous savez si ça a du sens dans vos projets; en général, il le fait pour les champs avec plus de un peu, si le terrain peut être utile d'être négatif.
7
Il est très important de qualifier vos variables comme signé ou non signé. Le compilateur a besoin de savoir comment traiter les variables lors de comparaisons et de moulage. Examinez la sortie de ce code:
Le compilateur magasins de la variable à l'aide d'un seul bit, 1 ou 0. Pour la signature de variables, le bit le plus significatif détermine le signe (haute est traitée négatif). Ainsi, la signature de la variable, alors qu'il est stocké en tant que 1 en binaire, il obtient interprété comme négatif.
Étendre sur ce sujet, un unsigned deux du nombre de bits a une gamme de 0 à 3, tandis signé deux du nombre de bits a une plage de -2 à 1.
2
Je ne pense pas que Andrew est de parler d'un seul bit de champs de bits. Par exemple, 4-champs de bits: 3 bits de l'information numérique, un bit de signe. Cela peut entièrement faire sens, mais j'avoue ne pas être en mesure de venir avec un tel scénario sur le dessus de ma tête.
Mise à jour: je ne dis pas que je ne peux pas penser à une utilisation multi-bits champs de bits (le fait d'avoir utilisé tous les temps de retour dans 2400bps modem jours à compresser les données autant que possible pour la transmission), mais je ne peux pas penser à une utilisation pour la signature de champs de bits, surtout pas d'un pittoresque, évident que serait une "révélation" pour les lecteurs.
2
Certainement ANSI-C, pour les entiers signés et non signés champs de bits. Il est requis. C'est aussi une partie de la rédaction du débogueur superpositions pour la norme IEEE-754 types à virgule flottante [[1][5][10]], [[1][8][23]], et [[1][10][53]]. Ceci est utile dans le type de machine ou d'un réseau traductions de ces données, ou le contrôle de conversions double (64 bits pour les mathématiques) à la moitié de précision (16 bits pour la compression) avant de les envoyer sur un lien, comme la carte vidéo de textures.
//Fields need to be reordered based on machine/compiler endian orientationtypedefunion_DebugFloat{float f;unsignedlong u;struct_Fields{signed s :1;unsigned e :8;unsigned m :23;} fields;}DebugFloat;
Eric
1
Oui, il peut. C bit-champs sont essentiellement juste de portée limitée des entiers. Souvent des interfaces matérielles pack bits, ensemble, de telle sorte que certaines de contrôle peut aller, par exemple, de -8 à 7, dans lequel le cas où vous souhaitez un signé bits, ou de 0 à 15, dans le cas où vous voulez un unsigned bits.
1
Un endroit où signé bitfields sont utiles, c'est dans l'émulation, où la émulé machine a moins de bits que votre défaut de word.
Je suis actuellement à la recherche à l'émulation de 48 bits de la machine et suis en train de travailler si c'est raisonnable d'utiliser les 48 bits de 64 bits "long long" via bitfields... le code généré sera la même que si j'ai fait tout le masquage, signe-extension, etc explicitement, mais il serait lu beaucoup mieux...
Bits de masquage signé types varie en fonction de la plate-forme matérielle à la plate-forme matérielle en raison de la façon dont il peut traiter avec un trop plein d'une maj etc.
Toute la moitié bon outil de contrôle qualité pour les avertir en connaissance de cet usage.
-4
si un " bit " est signé, alors vous avez une gamme de -1, 0, 1, qui devient alors un ternaire chiffres. Je ne pense pas que la norme de l'abréviation qui serait approprié ici, mais fait pour des conversations intéressantes 🙂
La partie pertinente de la norme (ISO/IEC 9899:1999) est 6.7.2.1 #4:
Oui. Un exemple de ici:
Que vous savez si ça a du sens dans vos projets; en général, il le fait pour les champs avec plus de un peu, si le terrain peut être utile d'être négatif.
Il est très important de qualifier vos variables comme signé ou non signé. Le compilateur a besoin de savoir comment traiter les variables lors de comparaisons et de moulage. Examinez la sortie de ce code:
De sortie:
Le compilateur magasins de la variable à l'aide d'un seul bit, 1 ou 0. Pour la signature de variables, le bit le plus significatif détermine le signe (haute est traitée négatif). Ainsi, la signature de la variable, alors qu'il est stocké en tant que 1 en binaire, il obtient interprété comme négatif.
Étendre sur ce sujet, un unsigned deux du nombre de bits a une gamme de 0 à 3, tandis signé deux du nombre de bits a une plage de -2 à 1.
Je ne pense pas que Andrew est de parler d'un seul bit de champs de bits. Par exemple, 4-champs de bits: 3 bits de l'information numérique, un bit de signe. Cela peut entièrement faire sens, mais j'avoue ne pas être en mesure de venir avec un tel scénario sur le dessus de ma tête.
Mise à jour: je ne dis pas que je ne peux pas penser à une utilisation multi-bits champs de bits (le fait d'avoir utilisé tous les temps de retour dans 2400bps modem jours à compresser les données autant que possible pour la transmission), mais je ne peux pas penser à une utilisation pour la signature de champs de bits, surtout pas d'un pittoresque, évident que serait une "révélation" pour les lecteurs.
Certainement ANSI-C, pour les entiers signés et non signés champs de bits. Il est requis. C'est aussi une partie de la rédaction du débogueur superpositions pour la norme IEEE-754 types à virgule flottante [[1][5][10]], [[1][8][23]], et [[1][10][53]]. Ceci est utile dans le type de machine ou d'un réseau traductions de ces données, ou le contrôle de conversions double (64 bits pour les mathématiques) à la moitié de précision (16 bits pour la compression) avant de les envoyer sur un lien, comme la carte vidéo de textures.
Eric
Oui, il peut. C bit-champs sont essentiellement juste de portée limitée des entiers. Souvent des interfaces matérielles pack bits, ensemble, de telle sorte que certaines de contrôle peut aller, par exemple, de -8 à 7, dans lequel le cas où vous souhaitez un signé bits, ou de 0 à 15, dans le cas où vous voulez un unsigned bits.
Un endroit où signé bitfields sont utiles, c'est dans l'émulation, où la émulé machine a moins de bits que votre défaut de word.
Je suis actuellement à la recherche à l'émulation de 48 bits de la machine et suis en train de travailler si c'est raisonnable d'utiliser les 48 bits de 64 bits "long long" via bitfields... le code généré sera la même que si j'ai fait tout le masquage, signe-extension, etc explicitement, mais il serait lu beaucoup mieux...
Selon cette référence, il est possible de:
http://publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp?topic=/com.ibm.vacpp6m.doc/language/ref/clrc03defbitf.htm
Bits de masquage signé types varie en fonction de la plate-forme matérielle à la plate-forme matérielle en raison de la façon dont il peut traiter avec un trop plein d'une maj etc.
Toute la moitié bon outil de contrôle qualité pour les avertir en connaissance de cet usage.
si un " bit " est signé, alors vous avez une gamme de -1, 0, 1, qui devient alors un ternaire chiffres. Je ne pense pas que la norme de l'abréviation qui serait approprié ici, mais fait pour des conversations intéressantes 🙂