首页 > 学院 > 开发设计 > 正文

用2的幂表示可多项选择的状态

2019-11-14 12:10:20
字体:
来源:转载
供稿:网友

我们在学习linux权限指令时,想必大多数人都会疑惑为啥用1,2,4来表x,w,r的权限,而不是1,2,3就行了。 实际工作中,我们也经常需要用到各种组合的状态,类似权限,每个权限并不唯一只有x,w,r,而是x,w,r任意组合。所以我们就需要任意组合的数字不重复。用2的幂就可以达成这样的效果。用1,2,3的话,比如x和w(1+2=3),就与r重复了。

除了以上任意组合的唯一性外,还有个好处,就是代码可以很好的用到位运算,显得有效率且简洁

比如java nio 的 SelectionKey

public static final int OP_READ = 1 << 0; public static final int OP_WRITE = 1 << 2; public static final int OP_CONNECT = 1 << 3; public static final int OP_ACCEPT = 1 << 4;

当表示多个组合的时候,用|

int interestSet = SelectionKey.OP_READ | SelectionKey.OP_WRITE;

当判断是否含有某种状态时

public final boolean isReadable() { return (readyOps() & OP_READ) != 0; }

关于2的幂

由于计算机的识别是二进制的,所以2的幂在项目源码中非常常见。 比如hashmap的数组长度,就是2的幂,有两个原因。 1、2^n & hash = hash % 2^n, 这个是在求key所在的数组位置。只有2的幂,该等式才相等。在源码里基本都是位运算的,效率更好。 2、 2^n 散列的效果是好于其他的。(在其他文章看到的,有例子)


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表