C语言中如何将16位结构体定义为4位和12位两部分

在C语言中,需要定义一个结构体NAME,此结构体为16位unsigned 类型,结构体分为两部分A和B,其中A为4位unsigned类型,B为12位unsigned类型,应该如何定义?

1、可以通过位域来实现,如下:
struct int_16
{
unsigned a : 4; //占4位的部分变量名为a
unsigned b : 12; //占12位的部分变量名为b
} ;
2、在c语言中定义bit型变量,可以使用位域来自定义。
位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:

struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度;

示例:通过位域来计算IEEE754浮点数标准中,单精度浮点数的最大值、最小值以及最小弱规范数。
#include <stdio.h>
typedef struct FP_SINGLE
{
unsigned __int32 fraction : 23;
unsigned __int32 exp : 8;
unsigned __int32 sign : 1;
} fp_single;
int main()
{
float x;
fp_single * fp_s = (fp_single *)&x;
fp_s->sign = 0;
fp_s->exp = 0xfe;
fp_s->fraction = 0x7fffff;
printf ("float 最大数: %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0x1;
fp_s->fraction = 0x0;
printf ("float 最小数: %le\n",(double)x);
fp_s->sign = 0;
fp_s->exp = 0;
fp_s->fraction = 0x1;
printf ("float 最小弱规范数:%le\n\n",(double)x);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2018-03-13
没法定义,只是在使用的时候可以实现4位与12位的效果。可以将A与B分别定义成16位的,按两个成员来用。或定义成一个16位成员,然后在读、写时分别处理高四位与低12位。
第2个回答  推荐于2017-12-15
#include <stdio.h>

typedef struct
{
unsigned short A:4;
unsigned short B:12;
}Name;

main()
{
printf("the lenth of UINT is:%d\n",sizeof(Name));
}

已调试通过~~~~
你问的那个问题和编译器有关

首先要在你的编译器中找到两字节的变量
VC中 unsigned short是两字节的
所以我定义的是 unsigned short

TC中可能用的是 unsigned int本回答被提问者采纳
第3个回答  2008-06-05
是 位域 吧:

struct Name
{
unsinged A:4;
unsinged B:12;
};
第4个回答  2008-06-05
typedef struct
{
unsinged A;
unsinged B;
}Name;

C语言中如何将16位结构体定义为4位和12位两部分
1、可以通过位域来实现,如下:struct int_16 { unsigned a : 4; \/\/占4位的部分变量名为a unsigned b : 12; \/\/占12位的部分变量名为b } ;2、在c语言中定义bit型变量,可以使用位域来自定义。位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:struct 位域...

C语言中结构体字节的计算方式
这个结构体在VS 2017下的sizeof的运算结果是12。那么根据上面的对其规则我们来对其进行计算。首先是char a。char大小是1,相对于首地址的偏移量是0,然后是int i。int i的大小是4,相对于首地址的偏移量是1,但是1不是4的整数倍,所以编译器会自动在char a和int i之间填充字节字节。所以in i的偏...

C语言的结构体位定义问题
uint8_t bit14:1; uint8_t bit15:1;}BITS162;int main(){ printf("%d,%d",sizeof(BITS161),sizeof(BITS162)); return 0;}输出为2,2,表示结构体都是两个字节。但是如果typedef unsigned int uint16_t ; 就是用通常的4字节整形表示uint16_t ,上面的结构体至少要一个...

C语言结构体定义
结构体的定义如下所示,struct为结构体关键字,tag为结构体的标志,member-list为结构体成员列表,其必须列出其所有成员;variable-list为此结构体声明的变量。在一般情况下,tag、member-list、variable-list这3部分至少要出现2个。结构体的成员可以包含其他结构体,也可以包含指向自己结构体类型的指针,而...

C语言中:结构体内部定义的不同类型的变量分配地址是不是连续的?_百度...
{ char c1;float f;char c2;} 这个结构体中,char为1字节,float为4字节,但是sizeof(struct test)却是12字节,这里面就是“对齐基数”的作用。根据上面的结论,对于这个结构体,它的当前对齐基数是4,虽然char c1只有一字节,但是编译器会给他后面添加3字节的填充字节,让float的地址对齐到4字节...

7、在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列...
int<=float<double。char(字符型)的存储空间大小为1个字节,int(整数型)的存储空间大小为2个字节,long int(长整数型)的存储空间大小为4个字节,float(单精度型)的存储空间大小为4个字节,double(双精度型)的存储空间大小为8个字节。所以char<int<long int<=float<double,结果选择A。

C语言结构体位域的简单介绍
结构体在C语言中是一种复合数据类型,允许包含多种数据类型,如同学生信息表。例如:声明结构体方式为:在32位操作系统中,使用sizeof函数获取结构体占用的字节大小。例如:理解结构体占用字节大小时,需考虑数据类型所占字节数。例如:结构体的内存对齐是指CPU以32位(4字节)为单位进行数据访问。若数据...

c语言结构体定义
在C语言中,结构体是一种可以包含多个不同类型数据项的数据结构。结构体定义用于创建新的数据类型,这些类型可以包含多个字段,每个字段可以有不同的数据类型。结构体定义的一般形式如下:c struct 结构体名称 { 成员类型1 成员名称1;成员类型2 成员名称2;...成员类型n 成员名称n;};详细解释:1. ...

请问C语言中,如何在结构体内定义长度不确定的数组呢?
两种方法:一种是采用指针, 动态分配内存 另一种请搜索"柔性数组", 这种方式同样需要在堆中动态分配内存.

c语言结构体问题
student stu[STU+1]; \/*学生结构体数组,最后留一位buffer*\/ inputTestStuInfo (stu, &stuNum, &subNum); runMeun (stu, &stuNum, subNum); \/*运行菜单*\/ return 0;}\/*测试数据*\/status inputTestStuInfo (student stu[], int *stuNum, int *subNum) { status testStatus; int i; *subNum...

相似回答