需要帮助了解<<<按位运算符在Objective-C中工作

时间:2013-07-12 02:14:20

标签: ios objective-c bit-manipulation operator-keyword

我正在研究如何在Objective-C中使用UISwipeGestureRecognizer类,并碰巧运行名为UISwipeGestureRecognizerDirection的枚举。

Apple将其定义为:

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

我不确定编译器如何解释上述内容,特别是&lt;&lt;运营商。从查找起来,它似乎是向左移位 - 但我恐怕我不明白操作员如何在上面工作。

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

2 个答案:

答案 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
} 

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