位运算知识简介
- 按位与
&
- 对应的两个二进制位均为1时,结果位才为1,否则为0(与1相&就保持原位,与0相&就为0)
- 举例:9&5=1
1001&0101=0001
- 按位或
|
- 对应的两个二进制位有一个为1时,结果位就为1,否则为0
- 举例:9|5=13
1001|0101=1101
- 左移
<<
- 把一个数的各个二进位全部左移n位,左移n位其实就是乘以2的n次方
- 规则:高位丢弃,低位补0,举例说明:当左移的运算数是int 类型时,每移动1位它的
第31位
就要被丢弃
- 举例:1<<4=16
0001<<4=1 0000
位移枚举定义
- 第一个为
NSUInteger
这个为固定值
- 第二个为
枚举类型
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
};
位移枚举的作用
- 可以同时存在多个枚举值(按
|
计算设置,下面会解释)
- 举例
self.view.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin
| UIViewAutoresizingFlexibleRightMargin
| UIViewAutoresizingFlexibleWidth
| UIViewAutoresizingFlexibleHeight;
self.view.autoresizingMask = 1 << 0 | 1 << 2 | 1 << 1 | 1 << 4;
self.view.autoresizingMask = 0 0001 | 0 0100 | 0 0010 | 1 0000;
self.view.autoresizingMask = 0 0101 | 0 0010 | 1 0000;
self.view.autoresizingMask = 0 0111 | 1 0000;
self.view.autoresizingMask = 1 0111;
// 1 0111 & 0 0001 = 0 0001,所以会指定代码逻辑1
if((self.view.autoresizingMask & UIViewAutoresizingFlexibleLeftMargin) == UIViewAutoresizingFlexibleLeftMargin) {
// 代码逻辑1
}
// 1 0111 & 1 0000 = 1 0000,所以会指定代码逻辑2
if((self.view.autoresizingMask & UIViewAutoresizingFlexibleHeight) == UIViewAutoresizingFlexibleHeight) {
// 代码逻辑2
}
总结
- 设置位移枚举按位或
|
运算
- 使用位移枚举按位与
&
运算
参考文章
网友评论