我正在研究如何在Objective-C中使用UISwipeGestureRecognizer类,并碰巧运行名为UISwipeGestureRecognizerDirection的枚举。
Apple将其定义为:
typedef enum {
UISwipeGestureRecognizerDirectionRight = 1 << 0,
UISwipeGestureRecognizerDirectionLeft = 1 << 1,
UISwipeGestureRecognizerDirectionUp = 1 << 2,
UISwipeGestureRecognizerDirectionDown = 1 << 3
}
我不确定编译器如何解释上述内容,特别是&lt;&lt;运营商。从查找起来,它似乎是向左移位 - 但我恐怕我不明白操作员如何在上面工作。
非常感谢任何方向。提前谢谢!
答案 0 :(得分:3)
在计算机中,整数表示为1和0。
因此,对于1位计算机,我们只能使用1或0:
0或1 - 1是最大数字。
0 = 0
1 = 1
2位计算机: - 3是最大数量。记住你不是 从0到9计数。你必须计数到1 增加左边的下一列。
00 = 0 + 0 = 0
01 = 0 + 1 = 1
10 = 2 + 0 = 2
11 = 2 + 1 = 3
3位计算机: - 7是最大数
000 = 0 + 0 + 0 = 0
001 = 0 + 0 + 1 = 1
010 = 0 + 2 + 0 = 2
011 = 0 + 2 + 1 = 3
100 = 4 + 0 + 0 = 4
101 = 4 + 0 + 1 = 5
110 = 4 + 2 + 0 = 6
111 = 4 + 2 + 1 = 7
所有左移位(1 <3)意味着在最右边放置1 列(零位置)并将指定数量的位置移动到左侧。
001 - 1<<0 -- Move it 0 times - Value is 1
010 - 1<<0 -- Move it 1 times - Value is 2
100 - 1<<0 -- Move it 2 times - Value is 4
这是一个帮助您考虑8位计算机的表:
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
| 128| 64| 32| 16| 8| 4| 2| 1|
| 2^7| 2^6 | 2^5| 2^4| 2^3| 2^2| 2^1| 2^0|
|1 << 7 | 1 << 6 | 1 << 5 | 1 << 4 | 1 << 3 | 1 << 2 | 1 << 1 | 1 << 0 |
答案 1 :(得分:1)
这是一个向左的位移。这相当于
typedef enum {
UISwipeGestureRecognizerDirectionRight = 1,
UISwipeGestureRecognizerDirectionLeft = 2,
UISwipeGestureRecognizerDirectionUp = 4,
UISwipeGestureRecognizerDirectionDown = 8
}
允许按位测试很方便。除了它们都可以打包成一个变量之外,实际值没有什么意义 - 枚举值可以是任何东西,只要它们是唯一的。