シフト列挙解析

4065 ワード

シフト列挙
  • 変位列挙は非常に古いC言語技術
  • である.
  •  いずれも1の結果であれば1
  • です
  •  いずれも0であれば0
  • です
    練習する
  • 定義列挙タイプ
  • ///       typedef enum {
        ActionTypeTop       = 1 << 0,
        ActionTypeBottom    = 1 << 1,
        ActionTypeLeft      = 1 << 2,
        ActionTypeRight     = 1 << 3} ActionType;
  • メソッドターゲット
  • は、動作タイプパラメータに従って、異なる応答
  • を行う.
  • 操作タイプは任意に組み合わせることができる
  • .
  • メソッドによる
  • の実装
    - (void)action:(ActionType)type {    
    if (type == 0) {       
     NSLog(@"   ");        
     return;
        }   
         if (type & ActionTypeTop) {    
           
           NSLog(@"Top %tu", type & ActionTypeTop);
           
        }    if (type & ActionTypeBottom) {  
            
          NSLog(@"Bottom %tu", type & ActionTypeBottom);
          
        }    if (type & ActionTypeLeft) {    
           
         NSLog(@"Left %tu", type & ActionTypeLeft);
         
        }    if (type & ActionTypeRight) {    
         
           NSLog(@"Right %tu", type & ActionTypeRight);
        }
    }
  • メソッド呼び出し
  • ActionType type = ActionTypeTop | ActionTypeRight;
    [self action:type];

    コード・ノット
  • 使用   1つのパラメータに複数のパラメータを同時に設定できます 
  • 具体的な実行時に、   具体的に判断できる 
  • シフト設定により、非常に多くの組み合わせが得られます!
  • は、シフト列挙タイプについて、 0であれば、付加的な操作が何もしないことを示す、通常、実行効率が最も高い
  • である.
  • 開発中、変位の列挙を見ながら、追加の操作をしないで、パラメータは直接0を入力することができます!

  • iOS固有の構文
  • iOS 5.0以降、新しい列挙定義方式
  • が提供される.
  • 列挙を定義するとともに、列挙中のデータのタイプ
  • を指定する
  • typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions)
  • シフト列挙、使用可能   設定値
  • typedef NS_ENUM(NSInteger, UITableViewStyle)
  • 数値列挙、直接列挙設定値
  • を使用typedef NS_OPTIONS(NSUInteger, ActionType) {
        ActionTypeTop       = 1 << 0,
        ActionTypeBottom    = 1 << 1,
        ActionTypeLeft      = 1 << 2,
        ActionTypeRight     = 1 << 3
    };

    /*******変位列挙演習******/
    //同じ1と同じ位で他は0
    //1位または1が1その他は0
    //typedef enum{
    //
    //    ActionUp =    1 << 0,
    //    ActionDown =  1 << 1,
    //    ActionLeft =  1 << 2,
    //    ActionRight = 1 << 3,
    //
    //
    //
    //}ActionEnum;
    //typedef NS_OPTIONS(NSInteger, Action){
    //   
    //    ActionUp =    1 << 0,
    //    ActionDown =  1 << 1,
    //    ActionLeft =  1 << 2,
    //    ActionRight = 1 << 3,
    //   
    //   
    //   
    //} ;
    //
    typedef NS_ENUM(NSInteger,ActionEnum){
        ActionUp =    1 << 0,
        ActionDown =  1 << 1,
        ActionLeft =  1 << 2,
        ActionRight = 1 << 3,
    };
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];    
       //ビット単位または
        [self didSelcted:ActionUp | ActionDown];
       //0 0 0 1
       //0 0 1 0
       //0 0 1 1 -- 3
    }
    - (void) didSelcted:(ActionEnum)action{
       //action 0 0 1 1
       //up     0 0 0 1
       //        0 0 0 1 ---> 1
        if ((action & ActionUp)    == ActionUp) {
            NSLog(@"ActionUp %ld",action);
        }
       //action 0 0 1 1
       //up     0 0 1 0
       //        0 0 1 0 ---> 2
        if ((action & ActionDown)  == ActionDown) {
            NSLog(@"ActionDown%ld",action);
        }
       //action 0 0 1 1
       //up     0 1 0 0
       //        0 0 0 1 ---> 0
        if ((action &ActionLeft )  == ActionLeft) {
            NSLog(@"ActionLeft %ld",action);
        }
       //action 0 0 1 1
       //up     1 0 0 0
       //        0 0 0 0 ---> 0
        if ((action & ActionRight) == ActionRight) {
            NSLog(@"ActionRight %ld",action);
        }
    }