位运算实现组合选项
位运算实现组合选项
在实际开发中常会用到选项,选项开启和关闭可以有效的控制代码执行逻辑。
对于选项,我们可以简单的用类的一个属性去判断。也可以使用一些编程技巧,通过一个数字来表示组合选项。
一个简单的例子如下:
1 | public class ByteOption { |
在实际开发中常会用到选项,选项开启和关闭可以有效的控制代码执行逻辑。
对于选项,我们可以简单的用类的一个属性去判断。也可以使用一些编程技巧,通过一个数字来表示组合选项。
一个简单的例子如下:
1 | public class ByteOption { |
运算符<<
(左移),>>
(右移)和 >>>
(无符号右移)称为移位运算符。移位运算符的左侧操作数是要移位的值; 右侧操作数指定移位距离。下面是语法描述:
1 | ShiftExpression: |
n << s
的意思是n左移s个bit位,这相当于 n∗2s,注意溢出。n >> s
的意思是n带符号位右移s个bit位,若左操作数是正数,则高位补“0”,若左操作数是负数,则高位补“1”,这相当于 n/2s。n >>>s
的意思是不带符号右移,无论左操作数是正数还是负数,在高位都补“0”。n >> s
(n >> s) + (2 << ~s)
(n >> s) + (2L << ~s)
按位补码运算符: ~
shift表达式的类型是左侧操作数的提升类型。
1 | 5 >> 32 == 5 |
控制反转(Inversion of Control)是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。
在传统编程中,业务逻辑的流由静态绑定的对象确定。通过反转控制,流取决于在程序执行期间构建的对象图。这种动态流是通过抽象定义的对象交互实现的。此运行时绑定是通过依赖项注入或服务定位器等机制实现的。在 IoC 中,代码也可以在编译期间静态链接,但通过从外部配置读取其描述而不是在代码本身中直接引用来查找要执行的代码。
我们来看下,为什么说控制反转(IOC)是一种解耦:
通过前后的对比,我们不难看出来:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了,这就是“控制反转”这个名称的由来。
控制反转和依赖注入的区别: IoC框架使用依赖注入作为实现控制反转的方式,但是控制反转还有其他的实现方式,所以不能将控制反转和依赖注入等同。