第03天多线程网络:(12):位移枚举简单介绍

原创
2017/04/24 14:32
阅读数 3

#####一、位移枚举简单介绍

#pragma mark 枚举创建
// 第一种写法
typedef enum
{
    LYHTypeDemoTop,
    LYHTypeDemoBottom,
}LYHDemoType;

// 第二种写法
typedef NS_ENUM(NSInteger,LYHType)
{
    LYHTypeTop,
    LYHTypeBottom,
};

// 第三种写法 位移枚举
/*
    << 代表左移
 
    <<0 左移0位
    <<1 左移1位
 */
// 位移可以传递多个值
// 如果是位移枚举,观察第一个枚举值,如果该枚举值!=0,那么可以默认传0做参数,如果传0做参数,那么效率最高
typedef NS_OPTIONS(NSInteger, LYHActionType)
{
    LYHActionTypeTop    = 1<<0,  // 1左移0位 = 1 ----> 1*2(0) = 1;
    LYHActionTypeBottom = 1<<1,  // 1左移1位 = 2 ----> 1*2(1) = 2;
    LYHActionTypeLeft   = 1<<2,  // 1左移2位 = 4 ----> 1*2(2) = 4;
    LYHActionTypeRight  = 1<<3,  // 1左移3位 = 8 ----> 1*2(3) = 8;
};

#####二、按位与

 按位与  &
  1 & 1 = 1
  1 & 0 = 0
  0 & 0 = 0
 &的结果 : 按位与 只要有0就为0
>>>>
#pragma mark 与运算
    /*
     计算 与运算 只要有0就为0
     type = 15 (1111)
     type & LYHActionTypeTop
     = 1111 | 0001 = 0001
     
     type & LYHActionTypeBottom
     = 1111 | 0010 = 0010
     
     type & LYHActionTypeLeft
     = 1111 | 0100 = 0100
     
     type & LYHActionTypeRight
     = 1111 | 1000 = 1000
     
     */

#####三、按位或

 按位或  |
  1 | 1 = 1
  1 | 0 = 1
  0 | 0 = 0
 |的结果 : 按位或 只要有1就为1
>>>>
#pragma mark 或运算
    /**
     
     LYHActionTypeTop 0001          1
     LYHActionTypeBottom 0010       2
     LYHActionTypeLeft 0100         4
     LYHActionTypeRight 1000        8
     
     LYHActionTypeTop | LYHActionTypeBottom 
     = 0001 | 0010 = 0011 (3)
     LYHActionTypeTop | LYHActionTypeBottom | LYHActionTypeLeft
     = 0001 | 0010 = 0011 (3) | 0100 = 0111(7)
     LYHActionTypeTop | LYHActionTypeBottom | LYHActionTypeLeft | LYHActionTypeRight
     = = 0001 | 0010 = 0011 (3) | 0100 = 0111(7) | 1000 = 1111(15)
     
     最终结果为 15
     */

code

#import "ViewController.h"
#pragma mark 枚举创建
// 第一种写法
typedef enum
{
    LYHTypeDemoTop,
    LYHTypeDemoBottom,
}LYHDemoType;

// 第二种写法
typedef NS_ENUM(NSInteger,LYHType)
{
    LYHTypeTop,
    LYHTypeBottom,
};

// 第三种写法 位移枚举
/*
    << 代表左移
 
    <<0 左移0位
    <<1 左移1位
 */
// 位移可以传递多个值
// 如果是位移枚举,观察第一个枚举值,如果该枚举值!=0,那么可以默认传0做参数,如果传0做参数,那么效率最高
typedef NS_OPTIONS(NSInteger, LYHActionType)
{
    LYHActionTypeTop    = 1<<0,  // 1左移0位 = 1 ----> 1*2(0) = 1;
    LYHActionTypeBottom = 1<<1,  // 1左移1位 = 2 ----> 1*2(1) = 2;
    LYHActionTypeLeft   = 1<<2,  // 1左移2位 = 4 ----> 1*2(2) = 4;
    LYHActionTypeRight  = 1<<3,  // 1左移3位 = 8 ----> 1*2(3) = 8;
};

@interface ViewController ()

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//    [self demo:LYHActionTypeTop | LYHActionTypeBottom | LYHActionTypeLeft | LYHActionTypeRight];
    [self demo:0];
    // 计算 按位或 只要有1就为1

#pragma mark 或运算
    /**
     
     LYHActionTypeTop 0001          1
     LYHActionTypeBottom 0010       2
     LYHActionTypeLeft 0100         4
     LYHActionTypeRight 1000        8
     
     LYHActionTypeTop | LYHActionTypeBottom 
     = 0001 | 0010 = 0011 (3)
     LYHActionTypeTop | LYHActionTypeBottom | LYHActionTypeLeft
     = 0001 | 0010 = 0011 (3) | 0100 = 0111(7)
     LYHActionTypeTop | LYHActionTypeBottom | LYHActionTypeLeft | LYHActionTypeRight
     = = 0001 | 0010 = 0011 (3) | 0100 = 0111(7) | 1000 = 1111(15)
     
     最终结果为 15
     */
}

/*
 按位与 和 按位或
 
 按位与  &
  1 & 1 = 1
  1 & 0 = 0
  0 & 0 = 0
 &的结果 : 按位与 只要有0就为0
 
 按位或  |
  1 | 1 = 1
  1 | 0 = 1
  0 | 0 = 0
 |的结果 : 按位或 只要有1就为1
 
 */
- (void)demo:(LYHType)type
{
    
    NSLog(@"%zd",type);
    if (type & LYHActionTypeTop) {
        NSLog(@"向上 %zd",type & LYHActionTypeTop);
    }
    
    if (type & LYHActionTypeBottom) {
        NSLog(@"向下 %zd",type & LYHActionTypeBottom);
    }

    if (type & LYHActionTypeLeft) {
        NSLog(@"向左 %zd",type & LYHActionTypeLeft);
    }

    if (type & LYHActionTypeRight) {
        NSLog(@"向右 %zd",type & LYHActionTypeRight);
    }
    
#pragma mark 与运算
    /*
     计算 与运算 只要有0就为0
     type = 15 (1111)
     type & LYHActionTypeTop
     = 1111 | 0001 = 0001
     
     type & LYHActionTypeBottom
     = 1111 | 0010 = 0010
     
     type & LYHActionTypeLeft
     = 1111 | 0100 = 0100
     
     type & LYHActionTypeRight
     = 1111 | 1000 = 1000
     
     */
    
}

@end
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部