进制表示法:
二进制: 0b
八进制: 0
十六进制: 0x
按位操作符
-
向左移位运算符
<<
:对值进行向左移动,超出数据项的高位将丢失,低位移入的值总为0,该操作需要说明位移动数目。typedef NS_OPTIONS(NSUInteger, MZState) { MZStateA = 1 << 0, //0001 1 MZStateB = 1 << 1, //0010 2 MZStateC = 1 << 2, //0100 4 MZStateD = 1 << 3, //1000 8 };
-
按位或运算符
|
:在对两个值执行按位或运算时,会逐位比较两个值的二进制数,只要有一位值是1,结果对应位即为1。MZState state = MZStateA | MZStateB; 0001 | 0010 = 0011 ==> 3
-
按位与运算符
&
:执行与运算时,会逐位比较两个值的二进制数,只有在对应位上都为1时,结果对应位上才是1。MZState state = MZStateA | MZStateB; //0011 ==> 3 state &= MZStateB; //==> 0010 ==> MZStateB
小结: 按位或 |
用来设置位值,按位与 &
用来解除之前保存位的值。(前提是值都是规则的,即盛放的值都是 1 << 0, 1 << 2 这种形式)
-
一次求返
~
:一次求返运算符是一元运算符,用来将位中的1翻转为0,位中的0翻转为1。(0b1111 | 0b1100) & ~0b1100 0b1111 & 0b0011 ==> 0b0011 ==> 3
-
按位异或运算符
^
:逐位比较两个运算数的二进制,只有在一个位是1,另一个数对应位不是1时,结果的对应位才是1(即:对应位不相同,则为1)。0b1111 ^ 0b1100 ==> 0011 ==> 3
网友评论