C 语言问题
#include <stdio.h>
typedef struct
{
int a:2;
int b:2;
int c:1;
}test;
void main()
{
test t;
t.a = 1;
t.b = 3;
t.c = 1;
printf( "%d\n ",t.a);
printf( "%d\n ",t.b);
printf( "%d\n ",t.c);
}
请问 int a:2;
int b:2;
int c:1;
这个是什么意思 ? 谢谢!
[解决办法]
用几个字节
[解决办法]
这种用法的标准叫法是:位段
int a:2;表示a是一个有符号整型,占有两位,也就是两bit。
int b:2;表示b是一个有符号整型,占有两位,也就是两bit。
int c:1;表示a是一个有符号整型,占有一位,也就是一bit。
不过象这样的定义,定义为如下形式好一些。象c只有一位,但却被符号位用了, 我真不知道这个怎么用。
unsgined int a:2;表示a是一个无符号整型,占有两位,也就是两bit。
unsigned int b:2;表示b是一个无符号整型,占有两位,也就是两bit。
unsigned int c:1;表示c是一个无符号整型,占有一位,也就是一bit
[解决办法]
位段,没错,不过注意内存里面是从低位到高位
比如内存是初始为0
XXX0 0000(X表示0或1,不过我们不关心)
低5位,
0 0000 分别是0(c) 00(b) 00(a)
t.a = 1;
XXX0 0001
t.b = 3;
XXX0 1101
t.c = 1;
XXX1 1101
因为高位没初始化,又没定义为unsigned,用%d显示出来的数
a=1
b=-1
c=1或-1
[解决办法]
同意楼上的意见.
[解决办法]
学习
[解决办法]
又长见识了。。。。
[解决办法]
同意 genieyyt(梧桐一叶) 的意见
[解决办法]
长了见识。。
[解决办法]
#include <stdio.h> ------为文件名
typedef struct------程序的被调用函数
{-----------------程序开始
int a:2;---------设定a为整型变量,并将值设为2
int b:2;---------设定b为同上
int c:1;---------设定c为同上
}test;函数结束
void main() 主函数
{--------函数体开始
test t;
t.a = 1;
t.b = 3;
t.c = 1;
printf( "%d\n ",t.a);输出
printf( "%d\n ",t.b);输出
printf( "%d\n ",t.c);输出----------三者的值a,b,c
}