c语言中如何定义一个bit?

一般我们用BOOL类型来作为标志位,比如真/假、有/无,但如果标志位太多,都用BOOL类型太浪费内存空间,最好之用一个bit来表示,1或者0。该怎么做呢?... 一般我们用BOOL类型来作为标志位,比如真/假、有/无,但如果标志位太多,都用BOOL类型太浪费内存空间,最好之用一个bit来表示,1或者0。该怎么做呢? 展开
 我来答
tattackor
推荐于2017-09-01 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:895万
展开全部

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;
}
人生多问
2009-11-04 · TA获得超过443个赞
知道小有建树答主
回答量:767
采纳率:100%
帮助的人:429万
展开全部
这个完全可以用int型代替多个位,用位操作符来获取int的某一位的值。
#include<iostream.h>

void main()
{
int a=12;//00001100B
if(a&4)//看第4位的值是否为1
cout<<1<<endl;
else
cout<<0<<endl;
}
关于位操作可以在进度里搜
不过这样每个标志位都没有名字了,你最好把每个位的作用都记在别的地方
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gao745
2009-11-04 · TA获得超过426个赞
知道小有建树答主
回答量:442
采纳率:0%
帮助的人:353万
展开全部
使用位段就可以很好的解决LZ的问题

例如

struct flags
{
usigned f0:1;
usigned f1:1;
......
};
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1487161
2009-11-04
知道答主
回答量:2
采纳率:0%
帮助的人:0
展开全部
没必要省
BOOL 有BOOL的好处
并不是浪费

另外: bool(小写)只占1字节
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式