-1

可能重复:
'unsigned temp:3' 是什么意思

我正在编写一个 iOS 应用程序,并且必须处理一些遗留的普通 ole C:

typedef struct {
    int32_t tid;
    int32_t pos;
    uint32_t bin:16, qual:8, l_qname:8;
    uint32_t flag:16, n_cigar:16;
    int32_t l_qseq;
    int32_t mtid;
    int32_t mpos;
    int32_t isize;
} bam1_core_t;

我的问题涉及这一行uint32_t bin:16, qual:8, l_qname:8;,有人可以告诉我如何访问这些字段,这些字段在我看来是某种 32 位 int 的位向量子字段。

谢谢,
道格

4

2 回答 2

4

这些是位域。您可以像访问结构中的任何其他字段一样访问它们。冒号后面的数字定义了用于存储该字段的位数。例如,qual:8均值qual可以保存(仅)从 0 到 255 的值。

我应该补充一点,这:0 很特别——这意味着不应从当前项目(int、uint32_t 等)分配更多的位域——下一个位域将来自新的底层存储单元。

于 2012-06-25T22:18:22.153 回答
2

这些是位域,您可以这样引用它们:

bam1_core_t.binbam1_core_t.qual等等。

这些位域允许您更紧密地打包数据。右侧的数字:指定应分配多少位给与左侧标识符相关联的位置。

你会在 C 中看到这个的唯一地方是在structs 或unions 中。

于 2012-06-25T22:17:38.060 回答