MFC学习记录--(位操作)类型判断
在学习MFC源码时经常会有:
if(style&CS_TYPE)
{
//执行
}
问:那么if(style&CS_TYPE)有何实际意义那?
答:当style是由CS_TYPE类型系列(CS_TYPE系列类型转换为二进制只有一位为1)位于运算计算结果,则if(style&CS_TYPE)判断是style是否含有CS_TYPE类型
例如: #define CS_TYPE 0x0008//= 0000 1000//即只有一位二进制数据为1
#define CS_HIDE 0x0010//= 0001 0000
#define CS_SHOW 0x0020//= 0010 0000
DWORD style = CS_TYPE | CS_HIDE;
if(style&CS_TYPE);//true
if(style&CS_HIDE);//true
if(style&CS_SHOW);//false
----------------------------------------------------------------------------
//有则剔除无则包含
style |= CS_SHOW;//此时style含有CS_SHOW(之前没有用CS_SHOW做过按位与运算) 等效于 DWORD style = CS_TYPE | CS_HIDE | CS_SHOW;
if(style&CS_SHOW);//true
style |= CS_TYPE;//剔除CS_TYPE属性(之前用CS_TYPE做过按位与运算)
if(style&CS_TYPE);//false
if(style&CS_TYPE)
{
//执行
}
问:那么if(style&CS_TYPE)有何实际意义那?
答:当style是由CS_TYPE类型系列(CS_TYPE系列类型转换为二进制只有一位为1)位于运算计算结果,则if(style&CS_TYPE)判断是style是否含有CS_TYPE类型
例如: #define CS_TYPE 0x0008//= 0000 1000//即只有一位二进制数据为1
#define CS_HIDE 0x0010//= 0001 0000
#define CS_SHOW 0x0020//= 0010 0000
DWORD style = CS_TYPE | CS_HIDE;
if(style&CS_TYPE);//true
if(style&CS_HIDE);//true
if(style&CS_SHOW);//false
----------------------------------------------------------------------------
//有则剔除无则包含
style |= CS_SHOW;//此时style含有CS_SHOW(之前没有用CS_SHOW做过按位与运算) 等效于 DWORD style = CS_TYPE | CS_HIDE | CS_SHOW;
if(style&CS_SHOW);//true
style |= CS_TYPE;//剔除CS_TYPE属性(之前用CS_TYPE做过按位与运算)
if(style&CS_TYPE);//false