今天需要在程序中做出多项选择的判断,但以前经常遇到的x |=y | z; 这样,我也明白这是多选的意图,但我还没有研究为什么能达到我们想要的多选操作。
今天早上看了百度,搜索了两篇文章:
三个性质的异或运算:同0、不同1
and运算:两者为1时为1,有0时为0
或运算: 1为1
将宏定义如下: (观察其特征) ) ) ) )。
#defineFLAG_DUPLICATE0x01//部署二进制文件00000001
#defineFLAG_VISIBLE0x02//部署二进制文件00000010
#defineFLAG_CANSELECT0x04//部署二进制文件00000100
#defineFLAG_LABELED0x08//部署二进制文件00001000
#defineFLAG_BACKGROUND0x10//部署二进制文件00100000
#defineFLAG_SHOWOUTLINE0x20//部署二进制文件01000000
#defineFLAG_SHOWATEAGLE0x40//部署二进制文件10000000
(注)在C/C中,八进制以0开始,例如123 (区分十进制123 ); 十六进制以0x开始,例如0x40 )
这样设置宏的目的是为了能够应用比特运算的性质来判断复选框的状态
假设使用int nStatus; 保存复选框的结果。 您可以:
1.jydhm选中一个复选框,nStatus=nStatus|FLAG_DUPLICATE; (其他类似)
2 .那么,如果清除复选框呢? 应该这样做:
int mask=0x fffffffff ^ flag _ duplicate; //)将FLAG_DUPLICATE的'1'的位置设为0,其他的比特都设为1 ) ) )。
nStatus=nStatusmask; (其他类似)
3 .如何判断某个复选框是否被选中? 这样做:
if (nstatusflag _ duplicate==flag _ duplicate () () ) ) ) ) ) 0
出局了
else
出局了
示例:
//清除复选框
void _ _ fastcallayerinfo :3360 set visible (boolbvisible ) ) )。
{
是if (可视)
m _ nstatus=m _ nstatus|flag _ visible;
else
{
int mask=0x fffffffff ^ flag _ visible;
m_nStatus=m_nStatusmask;
}
layer-Visible=bVisible;
}
//判断是否选中了某个复选框
if (m _ nstatusflag _ show outline==flag _ show outline () ) ) ) ) ) ) )。
层- symbol-outline=true;
else
层- symbol-outline=false; 另一篇: http://blog.csdn.net/battle hawk/article/details/5271327我又写了一个简单的测试| (或运算)的例子。 从输出的结果可以看出规律吧:
system.out.println(-1|-1; //输出-1
system.out.println(-1|0; //输出-1
system.out.println(-1|1; //输出-1
system.out.println(0|0); //输出0
system.out.println(0|1); //输出1
system.out.println(0|2); //输出2
2011-12-31