#include <stdio.h>
typedef union
{
unsigned int u;
struct
{
unsigned char a :1;
unsigned char b :1;
unsigned char c :6;
unsigned char d :1;
} ST;
}UN;
int main()
{
UN.ST.u = 0;
UN.ST.a = 1;
UN.ST.b = 2;
UN.ST.c = 3;
UN.ST.d = 4;
printf(“%d\n”, UN.u);
return 0;
}
代码大致就这样的,本人没运行,本人主要想知道值传递的过程,有没有高手给讲解下的。
typedef union
{
unsigned int u;
struct
{
unsigned char a :1;
unsigned char b :1;
unsigned char c :6;
unsigned char d :1;
} ST;
}UN;
int main()
{
UN.ST.u = 0;
UN.ST.a = 1;
UN.ST.b = 2;
UN.ST.c = 3;
UN.ST.d = 4;
printf(“%d\n”, UN.u);
return 0;
}
代码大致就这样的,本人没运行,本人主要想知道值传递的过程,有没有高手给讲解下的。
解决方案
10
你的代码有点问题,本人给你调试了一下,应该改成如下代码才能运行,具体解释见下一楼
#include <stdio.h> typedef union { unsigned int u; struct { unsigned char a :1; unsigned char b :1; unsigned char c :6; unsigned char d :1; } ST; }UN; int main() { UN un; un.u = 0; un.ST.a = 1; un.ST.b = 2; un.ST.c = 3; un.ST.d = 4; printf("%d\n", un.u); return 0; }
运行结果是13
10
1. 结构中的u和ST是共用一段内存,所以你修改了u,则ST的内容自动变化,同样假如你修改了ST的内容,则u的内容也自动变化.这就是联合体
2. unsigned char a :1;这种定义方式,是按位进行定义的,即a只占用一个位,同样b和d都只占用一位,所以假如这三个变量你赋值大于1的话,则自动被截断为1位,即除了低1位有效之外,其它高位的全部被丢弃。按位定义的,和这个变量的类型相关性不是很大,所以不是说a被定义成char就是8位。
3. 由于是联合体,所以你的main()中对u赋值之后,再对a\b\c\d赋值,结果u就被修改掉了
2. unsigned char a :1;这种定义方式,是按位进行定义的,即a只占用一个位,同样b和d都只占用一位,所以假如这三个变量你赋值大于1的话,则自动被截断为1位,即除了低1位有效之外,其它高位的全部被丢弃。按位定义的,和这个变量的类型相关性不是很大,所以不是说a被定义成char就是8位。
3. 由于是联合体,所以你的main()中对u赋值之后,再对a\b\c\d赋值,结果u就被修改掉了