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;
}
如题所说,结构体中定义的变量,后面带了冒号还有数字,然后就作不懂了 展开
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;
}
如题所说,结构体中定义的变量,后面带了冒号还有数字,然后就作不懂了 展开
4个回答
展开全部
该种形式出现于结构体或共用体的定义中,是位域定义的标准形式。
其使用方式为
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是非法的,编译会出错。
其使用方式为
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是非法的,编译会出错。
展开全部
这表示位段,例如int i:8;表示i占8位。
位段的定义格式为:
type [var]: digits
其中type只能为int,unsigned int,signed
int三种类型。
位段名称var是可选参数,即可以省略。
digits表示该位段所占的二进制位数
位段的定义格式为:
type [var]: digits
其中type只能为int,unsigned int,signed
int三种类型。
位段名称var是可选参数,即可以省略。
digits表示该位段所占的二进制位数
追问
那这是不是意味着这个变量表示的范围变化了,比如int i: 8;是不是i只能表示0~255,或者-128~127。是前者还是后者?
还有,在结构体外可否用这种方式,比如我想定义个开关变量,只须1bit,是不是可以定义int i: 8; //不在结构体中
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这是“位段”结构了,后面的数字是指明这个量占用的bit数了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
百度“C结构体的高级特性”,然后自己看吧。要学会自己找资料,网上后很多帖子分析结构体的高级特性,而且分析的很好。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询