2017-02-20 4 views
1

私はビットフィールドについて約 http://en.cppreference.com/w/cpp/language/bit_fieldを読んでいます。Bitwise Contextの "straddle"は何を意味しますか?

この記事では、「straddl(e)」ビットを記述しています。 例のコンテキストが含まれています...

は「隣接するビットフィールドメンバは 個々のバイトを共有して跨ぐように包装されていてもよいです。」

ビット単位のフィールドでこの単語の意味は何ですか?

+1

そのページの2番目の例を確認してください。引用された説明は、同じバイトが複数のフィールドをホストすることを意味します(通常は発生しません)。 – zerkms

+0

ビットフィールドが複数のバイトにまたがるか、または1バイトを占める可能性があり、実装に完全に依存します。 –

+0

"span across"、1バイトのビットの一部、次のバイトの他の部分。 –

答えて

2

ページを書くとき、私はそのページ上の2番目の例に示されている、として正しくコメントで発見、状況を参照するために、その単語を使用:ここで

#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 
} 

フィールド(sizeof(S)が2であると仮定)b2長さが6ビットであり、最初の3ビットは第1バイトにあり、第2の3ビットは第2バイトにある。 2バイトに跨っています。 (次の例は、6ビットをすべて1バイトに強制する方法を示しています)

関連する問題