帮我解释一下这个结构体?
答案:5 悬赏:80 手机版
解决时间 2021-12-01 20:15
- 提问者网友:沉默的哀伤
- 2021-11-30 21:32
帮我解释一下这个结构体?
最佳答案
- 五星知识达人网友:像个废品
- 2021-11-30 23:05
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
unsigned char b8:1;
unsigned char b9:1;
unsigned char b10:1;
unsigned char b11:1;
unsigned char b12:1;
unsigned char b13:1;
unsigned char b14:1;
unsigned char b15:1;
每个都占一位```若不够放存入下个字节中··
1共占2个字节``
:1是按位存储·
如
struct xxx
{
成员 1 类型成员 1 : 成员 1 位数 ;
成员 2 类型成员 2 : 成员 2 位数 ;
成员 3 类型成员 3 : 成员 3 位数 ;
};
基本的成员变量就会被拆分!这个语法在初级编程中很少用到,但是在高级程序设计中不断地被用到!例如:
struct student
{
unsigned int sex : 1;
unsigned int age : 15;
};
上述结构体中的两个成员 sex 和 age 加起来只占用了一个 unsigned int 的空间(假设 unsigned int 为 16 位)。
基本成员变量被拆分后,访问的方法仍然和访问没有拆分的情况是一样的,例如:
struct student sweek;
sweek.sex = MALE;// 这里的 MALE 只能是 0 或 1 ,值不能大于 1
sweek.age = 20;
虽然拆分基本成员变量在语法上是得到支持的,但是并不等于我们想怎么分就怎么分,例如下面的拆分显然是不合理的:
struct student
{
unsigned int sex : 1;
unsigned int age : 12;
};
这是因为 1+12 = 13 ,不能再组合成一个基本成员,不能组合成 char 、 int 或任何类型,这显然是不能 “ 自圆其说 ” 的。
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
unsigned char b8:1;
unsigned char b9:1;
unsigned char b10:1;
unsigned char b11:1;
unsigned char b12:1;
unsigned char b13:1;
unsigned char b14:1;
unsigned char b15:1;
每个都占一位```若不够放存入下个字节中··
1共占2个字节``
:1是按位存储·
如
struct xxx
{
成员 1 类型成员 1 : 成员 1 位数 ;
成员 2 类型成员 2 : 成员 2 位数 ;
成员 3 类型成员 3 : 成员 3 位数 ;
};
基本的成员变量就会被拆分!这个语法在初级编程中很少用到,但是在高级程序设计中不断地被用到!例如:
struct student
{
unsigned int sex : 1;
unsigned int age : 15;
};
上述结构体中的两个成员 sex 和 age 加起来只占用了一个 unsigned int 的空间(假设 unsigned int 为 16 位)。
基本成员变量被拆分后,访问的方法仍然和访问没有拆分的情况是一样的,例如:
struct student sweek;
sweek.sex = MALE;// 这里的 MALE 只能是 0 或 1 ,值不能大于 1
sweek.age = 20;
虽然拆分基本成员变量在语法上是得到支持的,但是并不等于我们想怎么分就怎么分,例如下面的拆分显然是不合理的:
struct student
{
unsigned int sex : 1;
unsigned int age : 12;
};
这是因为 1+12 = 13 ,不能再组合成一个基本成员,不能组合成 char 、 int 或任何类型,这显然是不能 “ 自圆其说 ” 的。
全部回答
- 1楼网友:蓝房子
- 2021-12-01 03:25
sizeof() = 2
- 2楼网友:一把行者刀
- 2021-12-01 03:14
这是用户自己定义的结构体吧。一共有16个字节,变量后面加一个1,表示的是执行哪个变量,哪个变量就会做出相应的动作。
比如:执行unsigned char b14是否要做什么动作,如果为1,就执行该动作或不执行该动作。
比如:执行unsigned char b14是否要做什么动作,如果为1,就执行该动作或不执行该动作。
- 3楼网友:西岸风
- 2021-12-01 01:58
这个结构体里面有 16个 char 成员,每个成员占1bit
所以,16个成员,占16bit,也就是2个字节
每个变量 后面加个 :1,表示它占1bit
所以,16个成员,占16bit,也就是2个字节
每个变量 后面加个 :1,表示它占1bit
- 4楼网友:佘樂
- 2021-12-01 00:43
此结构定义16个无符号字符型变量,每个变量位域1,既1个bit
整个结构占2个字节
示例代码如下,winxp + bcc32编译通过
#include
#include
typedef struct {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
unsigned char b8:1;
unsigned char b9:1;
unsigned char b10:1;
unsigned char b11:1;
unsigned char b12:1;
unsigned char b13:1;
unsigned char b14:1;
unsigned char b15:1;
}BIT16_flag;
BIT16_flag bit;
int main()
{
printf("%d", sizeof(bit));
return 0;
}
输出:2
整个结构占2个字节
示例代码如下,winxp + bcc32编译通过
#include
#include
typedef struct {
unsigned char b0:1;
unsigned char b1:1;
unsigned char b2:1;
unsigned char b3:1;
unsigned char b4:1;
unsigned char b5:1;
unsigned char b6:1;
unsigned char b7:1;
unsigned char b8:1;
unsigned char b9:1;
unsigned char b10:1;
unsigned char b11:1;
unsigned char b12:1;
unsigned char b13:1;
unsigned char b14:1;
unsigned char b15:1;
}BIT16_flag;
BIT16_flag bit;
int main()
{
printf("%d", sizeof(bit));
return 0;
}
输出:2
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯