使用二进制1,2,4,8...做数据类型组合

前期知识准备

了解过linux系统的小伙伴都知道, linux系统的权限管理: x - 可执行权限、w - 可写权限、r - 可读权限。
其对应的值分别是:

  • r: 4
  • w: 2
  • x: 1

原理

1,2,4 分别对应着2的幂次方(20、21 、2^2),在计算机中都是以二进制的方式进行存储,对应的是:

  • 1:00000001
  • 2:00000010
  • 4:00000100
    可以看出,在1、2、4中,任意一个权限值都对应着唯一的一组权限分数;也就是我们可以通过最终的权限值推导出其包含有哪一个权限。
举个栗子:

如果一个人拥有读和写的权限,现在他的权限值为6,当需要判断他是否拥有写权限时,只需要用 6 和 2 进行按位与运算(6 & 2 = 2),结果为2 ,所以可以判断拥有此权限。当需要判断他是否拥有可执行权限时,同样只需要用 6 和 1 进行按位与运算 (6 & 1 = 0 ),结果为0,所以可以判断不拥有此权限。

明白了上面的原理, 我们就可以通过二进制[1, 2, 4, 8, 16 ....]的值来做一些数据类型有可能包含多种类型的组合类型值, 这样做的优点是用一个字段就可以保存所有有可能出现的类型组合, 也方便我们在数据检索方面做索引;缺点是我们需要通过程序是判断组合值是否包含某个类型值,同时如果类型多的时候,其所指向的值会越来越大。

你可能感兴趣的:(使用二进制1,2,4,8...做数据类型组合)