C与Objective-C中的枚举(位移枚举)

本文详细介绍了C语言和Objective-C中枚举类型的使用方法,包括基本语法、按位位移枚举及其应用场景,适合初学者快速掌握枚举的概念与实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.在C语言

中我们用到一串有关联,被当作判断状态依据的常量时,会用到枚举Enum,其使用:

enum week{ 
    Mon, 
    Tues, 
    Wed, 
    Thurs, 
    Fri, 
    Sat, 
    Sun 
};
默认情况Mon = 0;后面依次加1,也可以自己指定:

enum week{ 
    Mon = 1, 
    Tues, 
    Wed, 
    Thurs, 
    Fri, 
    Sat, 
    Sun 
};
这样Mon = 1;后面依然依次加1.

2.在Objective-C

中,因为版本,有几种实用枚举的样式。

使用C语言样式:

    enum test{
      t1,
      t2
    }tt;
    
    switch (tt) {
        case t1:
            NSLog(@"t1");
            break;
        case t2:
            NSLog(@"t2");
            break;
        default:
            break;
    }
感觉用起来很不爽,那么:

    typedef enum{
      t1,
      t2
    }test;
    
    test tt;
    
    switch (tt) {
        case t1:
            NSLog(@"t1");
            break;
        case t2:
            NSLog(@"t2");
            break;
        default:
            break;
    }
还是不够OC:

    typedef NS_ENUM(NSInteger,test){
      t1,
      t2
    };
    
    test tt;
    
    switch (tt) {
        case t1:
            NSLog(@"t1");
            break;
        case t2:
            NSLog(@"t2");
            break;
        default:
            break;
    }
嗯,这回就非常OC了,推荐这样使用


3.按位位移枚举

    typedef NS_ENUM(NSInteger,test){
      t1 = 1,     //1  对应2进制 1   左移低位0补齐
      t2 = 1<<1,  //2          10
      t3 = 1<<2,  //4         100
      t4 = 1<<3,  //8        1000
      t5 = 1<<4,  //16      10000
      t6 = 1<<5   //32     100000
    };
    
    NSLog(@"t1 = %ld",t1);
    NSLog(@"t2 = %ld",t2);
    NSLog(@"t3 = %ld",t3);
    NSLog(@"t2 = %ld",t4);
    NSLog(@"t3 = %ld",t5);
    NSLog(@"t3 = %ld",t6);
输出结果为1,2,4,8,16,32 。

那么什么情况用这种枚举呢?先上代码:

    typedef NS_ENUM(NSInteger,test){
      t1 = 1,     //1  对应2进制 1   左移低位0补齐
      t2 = 1<<1,  //2          10
      t3 = 1<<2,  //4         100
      t4 = 1<<3,  //8        1000
      t5 = 1<<4,  //16      10000
      t6 = 1<<5   //32     100000
    };
    
    test tt= (t3|t6);
    
    if((tt&t1)){
        NSLog(@"有t1");
    }else{
        NSLog(@"没有t1");
    }
    
    if((tt&t3)){
        NSLog(@"有t3");
    }else{
        NSLog(@"没有t3");
    }
    
    if((tt&t5)){
        NSLog(@"有t5");
    }else{
        NSLog(@"没有t5");
    }
    
    if((tt&t6)){
        NSLog(@"有t6");
    }else{
        NSLog(@"没有t6");
    }
输出结果为:

2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 没有t1
2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 有t3
2017-02-10 11:56:01.243 UIKitLearn[2460:69675] 没有t5
2017-02-10 11:56:01.244 UIKitLearn[2460:69675] 有t6
当我们对于一个事物的一种属性要用多种状态描述时,比如一行字,是 3号黑体有下划线的,就应该这样  3号|黑体|下划线,用或的方式集成多种状态,再判断某种状态有没有。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值