1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Template = 1 << 0,
MainType = 0x0000FFFF,
Basic = 0x10000 << 0,
SubType = 0xFFFF0000,
TemplateBasic = Template | Basic,
#define GetMainType(type) (PropertyType)((int)type & (int)PropertyType::MainType)
同理可以定义GetSubType
GetMainType(TemplateBasic)的计算过程如下:
1. 总体是将 `TemplateBasic` 的值(即 `Template | Basic`)与 `PropertyType::MainType` 进行按位与运算。
2. `TemplateBasic` 的值为 `Template | Basic`,即 `0x00000001 | 0x00010000`,结果为 `0x00010001`。
3. `PropertyType::MainType` 的值为 `0x0000FFFF`。
4. 进行按位与运算:`0x00010001 & 0x0000FFFF`。
5. 最终的结果为 `0x00000001`,即 `PropertyType` 枚举中 `Template` 的值。
因此,`GetMainType(TemplateBasic)` 的计算结果为 `Template`。
C++系列4:位运算的巧妙运用
本文由作者按照 CC BY 4.0 进行授权