我正在研究如何在Objective-C中使用UISwipeGestureRecognizer类,碰巧遇到了一个名为UIswipeGEstureReconsizerDirection的枚举。
苹果将其定义为:
typedef enum {
UISwipeGestureRecognizerDirectionRight = 1 << 0,
UISwipeGestureRecognizerDirectionLeft = 1 << 1,
UISwipeGestureRecognizerDirectionUp = 1 << 2,
UISwipeGestureRecognizerDirectionDown = 1 << 3
}
我不确定编译器是如何解释上述内容的,特别是<lt;操作人员从上面看,它似乎是按位向左移动的——但恐怕我不明白上面的操作员是如何工作的。
任何方向都将不胜感激。提前感谢!
在计算机中,整数表示为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 |
这是一个按位向左移位。这相当于
typedef enum {
UISwipeGestureRecognizerDirectionRight = 1,
UISwipeGestureRecognizerDirectionLeft = 2,
UISwipeGestureRecognizerDirectionUp = 4,
UISwipeGestureRecognizerDirectionDown = 8
}
允许逐位测试是一种方便。实际值没有什么意义,只是它们都可以打包到一个变量中——枚举值可以是任何东西,只要它们是唯一的。