【问题标题】:In C, the use of ":" operator in declaration instead of conditional [duplicate]在 C 中,在声明中使用“:”运算符而不是条件 [重复]
【发布时间】:2015-07-19 21:15:20
【问题描述】:

我看到这个被使用了,它在一个结构中。只有一次我看到“:”被用于条件句。但在这种情况下,它是 uint64_t 变量声明的一部分。

typedef struct
{
   uint64_t             attrOne:1;
   uint64_t             attrTwo:1;
   uint64_t             attrThree:1;
   uint64_t             attrFour:1;
   uint64_t             attrFive:1;
   uint64_t             attrSix:1;
   uint64_t             attrSeven:1;
   uint64_t             reserved0:55;
   uint64_t             reserved1;
} StructFlagValues;

不太清楚在这种情况下“:”运算符的确切含义。和位的位置有关吗?

谢谢。

【问题讨论】:

  • 那些是位域。 “:”后面的数字表示该字段占用了多少位。
  • 但是,不要从“职位”的角度来考虑它。请注意,确切的表示取决于编译器。例如,您不能依赖大端或小端顺序的位。

标签: c syntax operators


【解决方案1】:

这意味着前七个字段中的每个字段都占 1 位,然后是 55 位长整数。

在此处阅读更多信息:http://www.tutorialspoint.com/cprogramming/c_bit_fields.htm

【讨论】:

    【解决方案2】:

    : 运算符可以引爆bit fields

    这意味着每个“字段”都映射到特定字节的某些位。

    在您的示例中,这意味着每个字段都有一位长(0 或 1),编译器会应用所有逻辑来确保您仅访问特定字段。

    【讨论】:

    • 我假设您的意思是“表示”而不是“引爆”。 : 不会引起爆炸。
    猜你喜欢
    • 1970-01-01
    • 2016-10-01
    • 2012-08-21
    • 2022-01-17
    • 2012-12-05
    • 2016-04-15
    • 2014-08-09
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多