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



我正在研究如何在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
} 

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

相关内容

最新更新