按位上下文中的“跨越”意味着什么?

时间:2017-02-20 04:00:01

标签: bit-manipulation bit definition

我正在阅读有关位域的信息:  http://en.cppreference.com/w/cpp/language/bit_field

文章提到“straddl(e)”位。 示例上下文包括......

  

“相邻的位字段成员可能被打包以共享和跨越   个别字节。“

这个词在按位字段中的含义是什么?

1 个答案:

答案 0 :(得分: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位在第一个字节中,第二个3位在第二个字节中。它跨越了两个字节。 (下一个例子展示了如何将所有6位强制为一个字节)