二进制标志位(OC语言)

什么是二进制

在现实生活或者编程时,我们通常采用的是十进制,如int number = 8;

但是计算机是二进制语言,即全部用0,1表示。所以是1000

代码中如何表示

OC语言如下:

typedefNS_OPTIONS(NSUInteger, State) {

    StateNone  =0,

    StateA  = 1<<0,

    StateB  =  1<<1,

    StateC  =  1<<2,

};

StateNone即0001

StateA的意思就是将末位的1往前挪动1位,即0010

依次类推……

使用场景

在实际开发中,我们经常会遇到需要记录当前的状态的场景,有时候甚至不只一个状态

举个🌰:当我们需要从三个网络请求中分别请求一些数据时,且三个都成功的前提下我们才可以执行某个操作。

常规情况下,我们需要声明三个属性,比如:

@property (assign, nonatomic) BOOL isA;

@property(assign,nonatomic) BOOL isB;

@property(assign,nonatomic) BOOL isC;

这样比较麻烦,且不优雅,这种场景就可以使用二进制运算来实现标志位,一个状态就可以记录N多种标志位

如何用二进制运算实现标志位

typedefNS_OPTIONS(NSUInteger, State) {

     StateNone  =0,

     StateA  = 1<<0,

     StateB  =  1<<1,

     StateC  =  1<<2,

};

@property (assign, nonatomic)  State state;

初始化默认状态:state = StateNone;

A成功后:state &= StateA;

A置为失败:state &= (~StateA);

判断A是否成功:

if (state & StateA) {

    //A成功

} else {

    //A失败

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。