1.符号:

&:按位与
|:按位或
~:按位取反
^:按位异或
<<:位左移(左移出的数据丢弃,右侧补0)
>>:位右移(右移出的数据丢弃,左侧补0)

2.运算(改变flags的位值):

(1)打开位(置1位):
flags |= MASK;
flags = flags | MASK;

MASK为 1 的位被打开(置1)
MASK为 0 的位不改变

(2)关闭位(清零位):
flags &= ~(MASK);
flags = flags & ~(MASK);

MASK为 1 的位被关闭(置0)
MASK为 0 的位不改变

(3)切换位:
flags ^= MASK;
flags = flags ^ MASK;

MASK为 1 的位被切换
MASK为 0 的位不改变

(4)位左移、位右移:
flags<<n;		// flags位左移n位
flags>>n;		// flags位右移n位

更多推荐