C语言定义变量后面加冒号,数字什么意思 10

#include<stdio.h>structs1{inti:8;intj:4;inta:3;doubleb;};structs2{inti:8;intj:4;doubl... #include <stdio.h>

struct s1
{
int i: 8;
int j: 4;
int a: 3;
double b;
};

struct s2
{
int i: 8;
int j: 4;
double b;
int a: 3;
};

int main()
{
printf("length of s1 is %d\tlength of s2 is %d\n",sizeof(struct s1),sizeof(struct s2));
return 0;
}

如题所说,结构体中定义的变量,后面带了冒号还有数字,然后就作不懂了
展开
 我来答
风若远去何人留
推荐于2017-09-27 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450134
专业C/C++软件开发

向TA提问 私信TA
展开全部
该种形式出现于结构体或共用体的定义中,是位域定义的标准形式。
其使用方式为
struct name
{
type var_name : n;

};
含义为,在结构体name汇总,成员变量var_name占用空间为n位。
n为正整数,其值必须小于type类型占用的位数。比如type如果是int,占4字节32位,那么n必须是1~31之间的整数。
对于位域类型的成员,在赋值时如果实际值超过n位所能表达的范围,那么超出部分将会被截掉,只保存低位值。如int var:4,本身只有4位的空间,如果赋值var = 20, 由于20的二进制值为10100,实际为五位,这时var实际被赋值的就是低四位,0100,即4。

由于C语言中的地址是针对字节计算的,所以位域类型的成员变量不支持取地址操作,即对于变量v, 如果存在位域成员变量var,那么&a.var是非法的,编译会出错。
jzp1
2014-12-05 · TA获得超过425个赞
知道小有建树答主
回答量:391
采纳率:50%
帮助的人:145万
展开全部
这表示位段,例如int i:8;表示i占8位。

位段的定义格式为:
type [var]: digits
其中type只能为int,unsigned int,signed
int三种类型。
位段名称var是可选参数,即可以省略。
digits表示该位段所占的二进制位数
追问
那这是不是意味着这个变量表示的范围变化了,比如int i:  8;是不是i只能表示0~255,或者-128~127。是前者还是后者?
还有,在结构体外可否用这种方式,比如我想定义个开关变量,只须1bit,是不是可以定义int i: 8; //不在结构体中
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
煲水的鱼
2014-12-05 · TA获得超过212个赞
知道小有建树答主
回答量:161
采纳率:100%
帮助的人:137万
展开全部
这是“位段”结构了,后面的数字是指明这个量占用的bit数了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Cliuye
2014-12-05 · 超过28用户采纳过TA的回答
知道答主
回答量:70
采纳率:100%
帮助的人:57.6万
展开全部
百度“C结构体的高级特性”,然后自己看吧。要学会自己找资料,网上后很多帖子分析结构体的高级特性,而且分析的很好。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式