1

Objective-C で UISwipeGestureRecognizer クラスを使用する方法を調べていたところ、たまたま UISwipeGestureRecognizerDirection という名前の列挙型に遭遇しました。

Apple はこれを次のように定義しています。

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 を一番右の列 (0 の位置) に配置し、指定された数の場所を左に移動することを意味します。

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
} 

ビットごとのテストを許可すると便利です。実際の値は、それらすべてを 1 つの変数にパックできることを除けば、特に意味はありません。enum 値は、一意である限り、何でもかまいません。

于 2013-07-12T02:16:00.703 に答える