C语言中使用变量的位操作来存储某个状态

一个用作标志的普通变量至少要用一个字节—8 位, 而在某些计算机系统中则可能是 16 位。 如果我们想在一个很大的表中存储很多标志, 那么 “被浪费” 的内存空间是很可观的。在 C 语言中, 一种方法是用叫做位段的构造类型来定义一个压缩信息的结构。
我们通常想保持某个状态的Flag,就可以只用一个变量的某一个bit位来保存,这样可以节省空间!

先举个例子
通过位操作的方式将第四位置0:10转换成二进制就是0000 1010。
(1<<(index-1))就是先将1左移三位,就是0000 1000。
然后按位取反~(1<<(index-1)),就是1111 0111.
value(也就是10)与其按位与运算,0000 1010&1111 0111,这样就得到了0000 0010,这样就只将第四位清零,而不影响其他位!

//---将10的第四位置零,通过位操作
int value=10;
int index=4;
value&=~(1<<(index-1));

利用bit位的方法,设置各种状态的Flag,以设置工厂模式为例
(1).比如判断是否为工厂模式,我们先定义一个WORD(unsigned int类型,即占两个字节)字节的Flag—MonitorFlag,这个Flag是一个结构体成员变量。然后定义一个宏来标示这个结构体成员变量:#define MonitorFlags MonitorSetting.MonitorFlag

    typedef struct
    {
        BYTE Ident;
        WORD MonitorFlag; // 0
      
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值