标志位可以代表某些属性,如MFC窗体的标志位,代表是否有最大化按钮,是否有边框,是否是子窗体等
对于一个4字节的int数,有32位长度
00000000 00000000 00000000 00000000
可以通过将这些位置0或者1实现标志位设置。
对于位操作,就少不了位运算符|或、&与、^异或、~取反
定义标志位
如果想将从0开始第3位作为具有含义的标志位
00000000 00000000 00000000 00001000
对应的值为0x08,可以定义一个标志
设置标志位
定义一个变量arrtibute
给flag设置此标志位,使用|运算符,可以使特定位置1,这样arrtibute的第3位就成为了1
00000000 00000000 00000000 00001000
取消标志位
给arrtibute取消标志位,使用&运算符
arrtibute只需要与
11111111 11111111 11111111 11110111
即0xFFFFFFF7做与运算,就可以使第3位置0,而0xFFFFFFF7数值,实际上可以通过FLAG_AAA取反得到
查询标志位
通过变量与FLAG_AAA做与运算,如果标志位是1,与运算的结果就是1,如果标志位是0,与运算结果就是0
反转标志位
如果原本具有此标志,想取消此标志,或者原来没有此标志,想设置此标志,通过^异或运算符实现。标志位与1进行异或运算,则该位的1将变成0,0变成1,而其它位与0做异或运算,数值不会改变