c语言中如何定义一个bit?
一般我们用BOOL类型来作为标志位,比如真/假、有/无,但如果标志位太多,都用BOOL类型太浪费内存空间,最好之用一个bit来表示,1或者0。该怎么做呢?...
一般我们用BOOL类型来作为标志位,比如真/假、有/无,但如果标志位太多,都用BOOL类型太浪费内存空间,最好之用一个bit来表示,1或者0。该怎么做呢?
展开
4个回答
展开全部
1、在c语言中定义bit型变量,可以使用位域来自定义。
位域的定义和位域变量的说明位域定义与结构定义相仿,其形式为:
struct 位域结构名
{ 位域列表 };
其中位域列表的形式为: 类型说明符 位域名:位域长度;
2、示例:通过位域来计算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;
}
展开全部
这个完全可以用int型代替多个位,用位操作符来获取int的某一位的值。
#include<iostream.h>
void main()
{
int a=12;//00001100B
if(a&4)//看第4位的值是否为1
cout<<1<<endl;
else
cout<<0<<endl;
}
关于位操作可以在进度里搜
不过这样每个标志位都没有名字了,你最好把每个位的作用都记在别的地方
#include<iostream.h>
void main()
{
int a=12;//00001100B
if(a&4)//看第4位的值是否为1
cout<<1<<endl;
else
cout<<0<<endl;
}
关于位操作可以在进度里搜
不过这样每个标志位都没有名字了,你最好把每个位的作用都记在别的地方
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用位段就可以很好的解决LZ的问题
例如
struct flags
{
usigned f0:1;
usigned f1:1;
......
};
例如
struct flags
{
usigned f0:1;
usigned f1:1;
......
};
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没必要省
BOOL 有BOOL的好处
并不是浪费
另外: bool(小写)只占1字节
BOOL 有BOOL的好处
并不是浪费
另外: bool(小写)只占1字节
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询