2017-02-20 3 views
1

Je lis sur les champs de bit de: http://en.cppreference.com/w/cpp/language/bit_field.Que signifie "straddle" dans un contexte bitwise?

L'article mentionne "bits straddl (e)". Un contexte d'exemple comprend ...

« membres sur le terrain de bits adjacents peuvent être emballés de partager et enjamber les octets individuels. » Qu'est-ce que ce mot signifie dans un champ bitwise?

+1

Vérifiez le deuxième exemple sur cette page. L'explication citée signifie que le même octet hébergerait plusieurs champs (ce qui normalement ne se produit pas) – zerkms

+0

Cela signifie que les champs de bits peuvent occuper plusieurs octets ou occuper un seul octet et cela dépend totalement de l'implémentation. –

+0

"span across", une partie des bits dans un octet, l'autre partie dans l'octet suivant. –

Répondre

2

j'ai utilisé ce mot lors de l'écriture la page pour faire référence à la situation, comme repéré correctement dans les commentaires, indiqué dans le 2ème exemple sur cette page:

#include <iostream> 
struct S { 
    // will usually occupy 2 bytes: 
    // 3 bits: value of b1 
    // 2 bits: unused 
    // 6 bits: value of b2 
    // 2 bits: value of b3 
    // 3 bits: unused 
    unsigned char b1 : 3, : 2, b2 : 6, b3 : 2; 
}; 
int main() 
{ 
    std::cout << sizeof(S) << '\n'; // usually prints 2 
} 

Ici (en supposant sizeof(S) est 2) le champ b2 est de 6 bits de long, les 3 premiers bits sont dans le premier octet, les 3 autres bits sont dans le second octet. Il chevauche deux octets. (l'exemple suivant montre comment forcer tous les 6 bits dans un octet)