美文网首页
2的次幂数的位运算最佳实践

2的次幂数的位运算最佳实践

作者: Amitabha2 | 来源:发表于2020-07-27 14:47 被阅读0次

基础概念

  • 与(&):两位同时为“1”,结果才为“1”,否则为0
十进制 二进制
1 1
2 10
4 100
8 1000
16 10000
32 100000
64 1000000
128 10000000
256 100000000
0&0=0;  0&1=0;   1&0=0;    1&1=1;
eg. 
(10)    1+2+8=11
(2)     1+10+1000=1011
相等:
(10)    11&2=2
(2)     1011&0010=0010
相等:
(10)    11&(2+8)=(2+8)
(2)     1011&1010=1010
不相等(因为11中不包含4):
(10)    11&(2+4)=2
(2)     1011&0110=0010

特性1:
    11只能被拆分成1,2,8这三个2次幂数相加
特性2:
    三个2次幂数(1,2,8)相加,如果(1+2+8)&他所包含的数=他所包含的数

在数据库设计中的最佳实践

  • 根据特性1,我们可以一个字段里保存多个关联信息,使用时可拆出来,优于字符串"1,2,8"的方式,只需要存11,减少了存储空间,且可以用特性2的实践
  • 根据特性2,我们可以查询字段是否包含任意组合的几种类型的数据
实例
设备信息表->可以设置多个标签(1,2,4,8,16,32),例如设备01设置了2,8两个标签
1. 如果要设置设备有1和4的标签,tag字段存储(1+4)
2. 如果要查询有2标签的所有设备,select * from device where tag & 2 = 2
3. 如果要查同时有2,16标签的所有设备,select * from device where tag & (2+16) = (2+16)

可替代方案

这种方式也可用素数之积取余=0来替代,不过乘积会有比较明显长度限制,不建议使用

相关文章

  • 2的次幂数的位运算最佳实践

    基础概念 与(&):两位同时为“1”,结果才为“1”,否则为0 十进制二进制1121041008100016100...

  • 快速幂

    常规求幂 快速求幂(一般) 快速求幂 (递归) 快速求幂(位运算) 快速求幂(位运算,更简洁)

  • Python常用运算符||运算符的优先级

    一、优先级 1. 算数运算 结论: 先算乘除,后算加减,有幂运算先算幂运算 2. 位运算 3. 比较运算 复习:比...

  • shell-运算

    常用算术运算符 ,-,,/,% ,* (幂运算 5**7= 5的7次方) 1.expr ⚠️:1.不能计算幂运算2...

  • HashMap底层原理总结

    HashMap 为什么是 大于等于 2的幂次运算 key生成 数组 是为什么一位运算 程序是什么? 程序本质是数据...

  • 四位玫瑰数

    描述 四位玫瑰数是4位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。 例如:...

  • 数学知识

    什么是水仙花数 水仙花数只是自幂数的一种,严格来说三位数的3次幂数才成为水仙花数。附:其他位数的自幂数名字一位自幂...

  • 关于JDK1.8 java HashMap的tableSizeF

    简介 一个数的最近2的幂次数,是java hashmap初始化方法指定容量里面对容量进行处理采用的方法 1.位运算...

  • 转《python 位操作符 左移和右移 运算》

    左移和右移N位等同于无溢出检查的2的N次幂运算:2**N <<左移 运算规则: 按二进制形式把所有的数字向左移动对...

  • 二进制与十进制之间的转换

    1.二进制转十进制(按位逐幂求和,按4位分段),从右往左开始,数每一位2的n次幂并相加,幂从0开始每次递增1 比如...

网友评论

      本文标题:2的次幂数的位运算最佳实践

      本文链接:https://www.haomeiwen.com/subject/qduzlktx.html