Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带“quot;”的结构成员声明:1“;_C_Variables_Structure_Declaration - Fatal编程技术网

C 带“quot;”的结构成员声明:1“;

C 带“quot;”的结构成员声明:1“;,c,variables,structure,declaration,C,Variables,Structure,Declaration,我在linux内核文件include/sound/soc dapm.h中发现了这种结构。 我对其成员的声明感到困惑。我在谷歌上查找了它,但找不到任何有用的东西。 如果有人能解释为什么每个变量声明后都有:1,那将是很大的帮助。这是代码的一部分 struct snd_soc_dapm_widget { unsigned int off_val; /* off state value */ unsigned char power:1;

我在linux内核文件include/sound/soc dapm.h中发现了这种结构。 我对其成员的声明感到困惑。我在谷歌上查找了它,但找不到任何有用的东西。 如果有人能解释为什么每个变量声明后都有:1,那将是很大的帮助。这是代码的一部分

struct snd_soc_dapm_widget {

    unsigned int off_val;                   /* off state value */
    unsigned char power:1;                  /* block power status */
    unsigned char invert:1;                 /* invert the power bit */
    unsigned char active:1;                 /* active stream on DAC, ADC's */
    unsigned char connected:1;              /* connected codec pin */

}
谢谢。

这是一种叫a的东西。它用于内存优化。它允许您在比其他方式所需的更少的空间中存储类型

(代码来自上面的链接)


请注意,指定大于23的值如何将
Age.Age
的大小减小到
0
?这是因为
:3
。这也意味着
未签名字符处于活动状态:1示例非常适合存储布尔值:它只能为真或假,不能意外存储255(恰好是
无符号字符的最大值)。

它被称为位字段。这里有一个教程解释它们
#include <stdio.h>
#include <string.h>

struct
{
  unsigned int age : 3;
} Age;

int main( )
{
   Age.age = 4;
   printf( "Sizeof( Age ) : %d\n", sizeof(Age) );
   printf( "Age.age : %d\n", Age.age );

   Age.age = 7;
   printf( "Age.age : %d\n", Age.age );

   Age.age = 8;
   printf( "Age.age : %d\n", Age.age );

   return 0;
}