union,enum 对比

196 阅读1分钟

union 类型的使用

@implementation test_union  
{    
    // 联合体  
    union {  
        char bits;  
        // 位域  
        struct {  
            char front  : 1;  
            char back   : 1;  
            char left   : 1;  
            char right  : 1;  
        };  
          
    } _direction;  
      
}  


-(void)test_un
{
    _direction.bits = 0b0000000000;
    _direction.front = 0;
    _direction.back = 1;
}

union 大小为 siziof(char),每个bit位的命名依次位front,back,left,right,这样可以更充分的利用数据的每个bit

对比宏命令的形式

#define LGDirectionFrontMask    (1 << 0)  
#define LGDirectionBackMask     (1 << 1)  
#define LGDirectionLeftMask     (1 << 2)  
#define LGDirectionRightMask    (1 << 3)  

if (YES) {
        _direction.bits |= LGDirectionFrontMask;
    } else {
        _direction.bits &= ~LGDirectionFrontMask;
    }
    

对比enum类型

typedef enum TagMessageLevel
{
    TagMessageLevelNomal        = 150,
    TagMessageLevelLow          = 120,
    TagMessageLevelHigh         = 180,
    
}vTagMessageLevel;

enum类型