1

我正在研究如何在 Objective-C 中使用 UISwipeGestureRecognizer 类,并且碰巧遇到了一个名为 UISwipeGestureRecognizerDirection 的枚举。

苹果将​​其定义为:

typedef enum {
   UISwipeGestureRecognizerDirectionRight = 1 << 0,
   UISwipeGestureRecognizerDirectionLeft  = 1 << 1,
   UISwipeGestureRecognizerDirectionUp    = 1 << 2,
   UISwipeGestureRecognizerDirectionDown  = 1 << 3
} 

我不确定编译器如何解释上述内容,特别是 << 运算符。从查找来看,它似乎是向左移位 - 但恐怕我不明白上面的运算符是如何工作的。

非常感谢任何方向。提前致谢!

4

2 回答 2

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 |
于 2013-07-12T02:57:42.040 回答
1

它是向左移位。这相当于

typedef enum {
   UISwipeGestureRecognizerDirectionRight = 1,
   UISwipeGestureRecognizerDirectionLeft  = 2,
   UISwipeGestureRecognizerDirectionUp    = 4,
   UISwipeGestureRecognizerDirectionDown  = 8
} 

允许按位测试很方便。实际值没有什么意义,只是它们都可以打包到一个变量中——枚举值可以是任何东西,只要它们是唯一的。

于 2013-07-12T02:16:00.703 回答