Li *_*min 6 macos cocoa objective-c
我在框架目录中的NSArray.h头文件中看到了这个:
enum {
NSBinarySearchingFirstEqual = (1UL << 8),
NSBinarySearchingLastEqual = (1UL << 9),
NSBinarySearchingInsertionIndex = (1UL << 10),
};
typedef NSUInteger NSBinarySearchingOptions;
Run Code Online (Sandbox Code Playgroud)
什么是点"NSBinarySearchingFirstEqual =(1UL << 8)"?什么是此枚举和"NSBinarySearchingOptions"类型定义之间的关系?谢谢.
"NSBinarySearchingFirstEqual =(1UL << 8)"等将特定值分配给枚举常量.选择这些值以便它们由单个位表示,允许选项与按位运算组合."<<"运算符是左移; 你可以等同地把它写成:
enum {
NSBinarySearchingFirstEqual = 256,
NSBinarySearchingLastEqual = 512,
NSBinarySearchingInsertionIndex = 1024,
};
Run Code Online (Sandbox Code Playgroud)
选项可以组合如下:
NSBinarySearchingOptions opt = NSBinarySearchingFirstEqual | NSBinarySearchingLastEqual;
Run Code Online (Sandbox Code Playgroud)
请注意,NSBinarySearchingOptionstypedef为无符号整数,而不是枚举,因为它可以包含不是定义的枚举值之一的值(当组合多个值时).
通常这种enum定义表明它是一个掩码.枚举的每个成员都有一个唯一值,但也只有一个位设置,这意味着当您组合多个值时,您仍然可以通过查看设置的位来确定提供了哪些值.
例如,假设这个以二进制表示的32位整数:
0000 0000 0000 0000 0000 0001 0000 0000
Run Code Online (Sandbox Code Playgroud)
第8位置位,对应于枚举值NSBinarySearchingFirstEqual,因为值1向左移位8位最终为第8位(假设您从0开始对位进行排序)
0000 0000 0000 0000 0000 0101 0000 0000
Run Code Online (Sandbox Code Playgroud)
之前的32位整数有2位被设置,即第8位和第10位.这两个位对应于NSBinarySearchingFirstEqual和NSBinarySearchingInsertionIndex.
如果您不熟悉位移,请查看维基百科文章,其中包含一些有用的图表.
类型定义意味着a NSBinarySearchingOption是类型NSUInteger.本质上它们是相同的东西,但是通过定义不同的类型,可以更清楚地知道为接受这种类型的参数的方法提供什么样的值.
| 归档时间: |
|
| 查看次数: |
6931 次 |
| 最近记录: |