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

  • 时间:
  • 浏览:2
  • 来源:大发11选5_大发11选5官网

原来就会使得,各个情况表不易维护和判断,情况表很多,情况表越复杂性,代码会显得冗长难以维护.

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

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

合适相反数 - 1

像一种,独立情况表(标记)之间相互组合不可不还还都可以产生新的情况表(标记),且每个独立情况表(标记)这样true可能性false值的,亲戚亲戚朋友不可不还还都可以使用位域的概念来管理哪好多个情况表.

通过有一个 int字段,来加进多个 标志可能性情况表. 有一个 int字段,不不可不还还都可以管理多个标记(情况表)值.

这样神奇的操作怎样才能实现的呢? 答案只是通过位运算来实现.

一种情况表下, 有有一个 标记相互关联,但会 能产生新的标记,这样亲戚亲戚朋友就时要设置有一个 标记变量,但会 这样通过一系列的set法律办法来转换情况表.如

下面亲戚亲戚朋友来看具体实现.(简单的模仿Gravity类的一每种功能)

它的核心思要我 是将, int 数值看做是 二进制数位表示.可能性有十个 情况表就不可不还还都可以像原来 0000,用四位二进制表示,每有一个 二进制位都不可不还还都可以表示一种情况表. 但会 通过 位运算,来提取或加进标记位.四位对应的组合情况表有16个. 而亲戚亲戚朋友,只时要通过有一个 int变量就不不可不还还都可以管理哪好多个情况表.

当参与的情况表(标记)很多时,可能性使用单独的标记变量,就时要生成很多的变量,而用位域,一种独立情况表为不管有好多个个,都不可不还还都可以用有一个 变量表示.int类型最多存放3有一个 独立情况表

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

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

在Android中,亲戚亲戚朋友会老是用到可能性看一遍以下原来的代码 :

通常情况表下,可能性多个情况表可能性标记相互之间有关联, 如布局方向,上下左右,左上,居中 ... 等.亲戚亲戚朋友可能性会为每有一个 标记设置有一个 变量.

具体的调用实现 :

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

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

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

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

在取值范围内,移动一位合适乘2.