异或运算、与运算、或运算在设计复选框中的应用

本文介绍如何使用位运算(包括与、或、异或)来高效管理复选框的状态。通过定义宏并利用位运算特性,可以在不增加额外内存负担的情况下轻松实现复选框的选择、取消选择及状态查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 异或运算、与运算、或运算在设计复选框中的应用

三者的性质
异或运算:相同为0,不同为1
与运算:两者为1时为1,有0为0
或运算:有1为1

定义如下宏:(观察其特点)

#define FLAG_DUPLICATE   0x01   //展开二进制00000001 
#define FLAG_VISIBLE     0x02   //展开二进制00000010 
#define FLAG_CANSELECT   0x04   //展开二进制00000100 
#define FLAG_LABELED     0x08   //展开二进制00001000 
#define FLAG_BACKGROUND  0x10   //展开二进制00100000  
#define FLAG_SHOWOUTLINE 0x20   //展开二进制01000000 
#define FLAG_SHOWATEAGLE 0x40   //展开二进制10000000 

 

(注:在C/C++中八进制以0开头,如0123(区别十进制的123);十六进制以0x开头,如0x40)
这样设置宏目的是为了能够应用位运算的性质来判断复选框的状态

假设用 int nStatus;来存储复选框的结果,可以这样做:

1.若某一个复选框选中则:nStatus=nStatus|FLAG_DUPLICATE;(其他类似)

2.那么如果取消了一个复选框呢?应该这样做:
  int mask=0xffffffff^FLAG_DUPLICATE;//(把FLAG_DUPLICATE中为"1"的那一位置为0,其它位都为1)
  nStatus=nStatus&mask;(其他类似)

3.如何判断某一复选框是否被选中呢?这样做:
  if(nStatus&FLAG_DUPLICATE==FLAG_DUPLICATE)
      cout<<"选中"<<endl;
  else
      cout<<"未选中"<<endl;

例子:

 

//取消复选框 
void __fastcall LayerInfo::SetVisible(bool bVisible)
{
    
if(bVisible)
        m_nStatus
=m_nStatus|FLAG_VISIBLE;
    
else
    
{
        
int mask = 0xffffffff^FLAG_VISIBLE;
        m_nStatus
=m_nStatus&mask;
    }

    layer
->Visible= bVisible;
}


//判断某一复选框是否被选中
if(m_nStatus&FLAG_SHOWOUTLINE==FLAG_SHOWOUTLINE)
    layer
->Symbol->Outline=true;
else
    layer
->Symbol->Outline=false;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值