位运算的使用

作者: coderhlt | 来源:发表于2018-06-05 18:03 被阅读6次

    已知int a= 2; int b= 12;a的二进制形式是0010,b的二进制形式是1110;

    一、位与运算

         a & b:只有对应的两个二进位均为1时,结果位才为1,否则为0。
         0    0   1   0
         位与运算
         1    1   1   0
         -----------------------
         0    0   1   0
    

    二、位或运算

      a | b : a,b对应的二个二进位有一个为1时,结果位就为1,否则为0
         0    0   1   0
         位或运算
         1    1   1   0
         -----------------------
         1    1   1   0
    

    三、位左移运算

    整数a(0010) << 正数n:整数a的二进位左移n位
    
         a << 1 -> 0 1 0 0 
         a << 2 -> 1 0 0 0
         a << 3 -> 0 0 0 1 0 0 0 0
    
    

    四、位右移运算

      整数a(0010) >> 整数n:整数a的二进位右移n位
    
      a >> 1 -> 0 0 0 1
    

    五、位运算在枚举中的使用

    //1、简单应用举例
    typedef NS_OPTIONS(NSUInteger, State) {
        StateNormal       = 0,         //0000  正常状态下
        StateHighlighted  = 1 << 0,    //0001  高亮状态
        StateDisabled     = 1 << 1,    //0010  不能够点击状态
        StateSelected     = 1 << 2,    //0100。 选择状态
    };
    
    -(void)statestatus:(NSUInteger)allstated{
        if (allstated==0) {
            NSLog(@"正常情况下");
            return;
        }
        if (allstated&StateHighlighted) { //0110&0001=0000 !=StateHighlighted
            NSLog(@"我可以高亮");
        }
        if (allstated&StateDisabled) {//0110&0010=0010 == StateDisabled
            NSLog(@"我可以交互");
        }
        if (allstated&StateSelected) {//0110&0100=0100 StateSelected
            NSLog(@"我可以选择");
        }
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        //如果你想让他在StateSelected或StateDisabled状态下可以执行的一些事情,你就可以像这样调用
        [self statestatus:StateSelected|StateDisabled];//0100|0010 = 0110,即是StateSelected或StateDisabled状态下可以执行的一些事情
        
    }
    
    
    //2、系统常见的含位运算的枚举
    typedef NS_OPTIONS(NSUInteger, UIControlState) {
        UIControlStateNormal       = 0,
        UIControlStateHighlighted  = 1 << 0,                  // used when UIControl isHighlighted is set
        UIControlStateDisabled     = 1 << 1,
        UIControlStateSelected     = 1 << 2,                  // flag usable by app (see below)
        UIControlStateFocused NS_ENUM_AVAILABLE_IOS(9_0) = 1 << 3, // Applicable only when the screen supports focus
        UIControlStateApplication  = 0x00FF0000,              // additional flags available for application use
        UIControlStateReserved     = 0xFF000000               // flags reserved for internal framework use
    };
    
    typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
        UIViewAutoresizingNone                 = 0,
        UIViewAutoresizingFlexibleLeftMargin   = 1 << 0,
        UIViewAutoresizingFlexibleWidth        = 1 << 1,
        UIViewAutoresizingFlexibleRightMargin  = 1 << 2,
        UIViewAutoresizingFlexibleTopMargin    = 1 << 3,
        UIViewAutoresizingFlexibleHeight       = 1 << 4,
        UIViewAutoresizingFlexibleBottomMargin = 1 << 5
    };
    
    typedef NS_OPTIONS(NSUInteger, UNNotificationPresentationOptions) {
        UNNotificationPresentationOptionBadge   = (1 << 0),
        UNNotificationPresentationOptionSound   = (1 << 1),
        UNNotificationPresentationOptionAlert   = (1 << 2),
    }
    
        
        [btn setTitleColor:[UIColor redColor] forState:UIControlStateNormal|UIControlStateHighlighted];
        //设置按钮文字的颜色在高亮或正常状态下都为红色
        
        completionHandler(UNNotificationPresentationOptionAlert|UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound);
        //通知中心在有声音或有alter或有红色提醒时作出回调
    
    

    相关文章

      网友评论

        本文标题:位运算的使用

        本文链接:https://www.haomeiwen.com/subject/dafmsftx.html