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

#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 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是非法的,编译会出错。
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-05
这表示位段,例如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; //不在结构体中

本回答被网友采纳
第2个回答  2014-12-05
这是“位段”结构了,后面的数字是指明这个量占用的bit数了
第3个回答  2014-12-05
百度“C结构体的高级特性”,然后自己看吧。要学会自己找资料,网上后很多帖子分析结构体的高级特性,而且分析的很好。

C语言定义变量后面加冒号,数字什么意思
由于C语言中的地址是针对字节计算的,所以位域类型的成员变量不支持取地址操作,即对于变量v, 如果存在位域成员变量var,那么&a.var是非法的,编译会出错。

C语言中变量加冒号是什么意思
::表示访问该作用域以外的变量和函数。?:是三目运算符,以问号前面表达式的值来确定最终值是取冒号左边还是右边的值。

c语言中,函数定义中的冒号是什么意思?
(1)表示机构内位域的定义(即该变量占几个bit空间)代码如下:typedef struct _XXX{ unsigned char a:4;unsigned char c;} ; XXX (2)构造函数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。代码如下:struct _XXX{ _XXX() : y(0xc0) {} }...

C语言结构体在定义的时候,各成员后面加冒号是什么意思?
为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几 个不同的区域, 并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。位域的定...

c 中冒号是什么意思
在 C 语言中,冒号是一种特殊的语法符号,一般用于分隔不同部分的代码块或者语句。常见的地方包括 switch 语句、for 循环与结构体声明中的初始化部分,以及标签语句中前缀的位置等。冒号的使用可以使代码更易读易懂,而且对于一些高级编程技巧的实现也起到了重要作用。在 switch 语句中,case 后面跟随的...

c语言char c='\\72'表示什么?
char ch='\\72';表示定义字符型变量ch并赋初值为ASCII值为八进制数72,也就是十进制ASCII值为58的字符,事实上这是一个冒号。若要将十进制ASCII值为72的字符赋值给ch,应是ch=72;而不是ch='\\72',当然这种表示法由于是八进制的,所有其中任何一个数字都不会超过7,还可以用ch=‘\\072’;的...

C语言里两个冒号是什么意思c语言中两个冒号的意思
C语言里两个冒号的意思有三个:(1)表示“域操作符”。比如声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给出f的定义,那么在类外定义f时,就要写成void A::f(),表示这个f()函数是类A的成员函数。(2)直接用在全局函数前,表示是全局函数。例:在VC里,你...

c语言冒号是什么意思
1. 冒号在C语言中具有特殊意义,通常用于标识符类型声明和语句分隔。2. 在结构体或联合体中,冒号用于定义成员的位域宽度,如`int isReady:1;`。3. 这种位域宽度定义方式能够节省内存空间,适用于多种应用场景。4. 冒号在switch语句中用于分隔case标签和对应的执行代码块,如`case 0:`、`case 1:`...

c语言是什么意思冒号
c语言冒号是什么意思:1、这是c语言的三目运算符。2、对于条件表达式bx:y,先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值。一个条件表达式从不会既计算x,又计算y。3、条件运算符是右结合的,也就是说,从右向左分组计算。例如...

C语言:里面的冒号“:”是什么意思啊,还有“:”后面的1又是什么意思呢...
这是位域, 后面跟的1表示这个变量占1位.(8位1字节)位域的变量类型只有int和unsigned. 不过你这个也对, 它也是int型的.

相似回答