Java使用位域进行多标记(状态)管理

  • 时间:
  • 浏览:1
  • 来源:神彩排列三_彩神排列三官方

通过十个 int字段,来加带多个 标志由于状况. 十个 int字段,可以 管理多个标记(状况)值.

没人神奇的操作怎么可以实现的呢? 答案可是我通过位运算来实现.

通常状况下,由于多个状况由于标记相互之间有关联, 如布局方向,上下左右,左上,居中 ... 等人们门儿由于会为每十个 标记设置十个 变量.

~A : 将a的二进制表示每一位进行取反操作,0变1,1变0.

要花费相反数 - 1

它的核心思想可是我将, int 数值看做是 二进制数位表示.由于有十个 状况就可可以 像原先 0000,用四位二进制表示,每十个 二进制位都可可以 表示有某种状况. 因此通过 位运算,来提取或加带标记位.四位对应的组合状况有16个. 而人们儿,只可可以 通过十个 int变量就可以 管理那先 状况.

下面只介绍本文中,使用到的位操作

越多状况下, 十个 标记相互关联,因此能产生新的标记,没人人们儿就可可以 设置十个 标记变量,因此只有通过一系列的set最好的土方法来转换状况.如

A & B : A和B对应的二进制数位都为1时,结果才为1,越多状况为0.

像越多,独立状况(标记)之间相互组合可可以 产生新的状况(标记),且每个独立状况(标记)只有true由于false值的,人们儿可可以 使用位域的概念来管理那先 状况.

当参与的状况(标记)越多时,由于使用单独的标记变量,就可可以 生成越多的变量,而用位域,越多独立状况为不管有十有几个 个,都可可以 用十个 变量表示.int类型最多存放3十个 独立状况

A | B : A和B对应的二进制数位都为0时,结果才为0,越多状况为1.

A << B:将A的二进制表示的每一位向左移B位,左边超出的位截掉,右边存在问题的位补0。

在取值范围内,移动一位要花费乘2.

java中提供的基础位运算符有 与(&),或(|),非(~),异或(^),左移<<,

右移(>>)无符号右移(>>>).

下面人们儿来看具体实现.(简单的模仿Gravity类的一主次功能)

原先就会使得,各个状况不易维护和判断,状况越多,状况越简化,代码会显得冗长难以维护.

在Android中,人们儿会经常用到由于都看以下原先的代码 :

除了位非(~)是一元操作符外,其它的不是二元操作符。

具体的调用实现 :