什么是二进制
在现实生活或者编程时,我们通常采用的是十进制,如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失败
}