0

0

按位存储的概念及实例

零下一度

零下一度

发布时间:2017-06-23 09:14:47

|

1735人浏览过

|

来源于php中文网

原创

毕业季,浪了好久。。。过了这个六月,就正式踏入社会啦。。。总感觉还没准备好。。。。。。。。。。 特大转折。。。记录一下最近的一些知识。。。

按位存储的概念

       在数据库存储中,可以使用一种类二进制字符串来保存多个值,当这个二进制值是由0和1组成的时候,就可以按照从右到左,每个位按照2^n计算值相加进而换算成为一个十进制数,从而实现一个十进制值保存多种情况的目的。

举个栗子

现在3种不同的css样式,可以应用于不同的一些地方,如app、pc、小程序等。

按值存储的话,分别用1-3代表3种样式(styleType),分别用1-3代表支持类型app、pc、小程序(supportType),然后存储的时候应该是按这种方式:

 

PHP Apache和MySQL 网页开发初步
PHP Apache和MySQL 网页开发初步

本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。

下载
styleType supportType
1 1,3
2 1,2,3
3 1
... ...

 

 

 

 

 

显然,这样的话,supportType这个字段就要存储多个styleType代表值。

那么,按位存储是怎样的呢。用3位的类二进制字符串来表示,从左到右每一位分别对应样式1-3,1代表支持该样式,0代表不支持该样式。如要代表支持样式1,3的话,就用101来表示,第一、三位为1,其他位置0.那我们存储的时候,是不是就存储这么一个3位的字符串呢。并不是,要存储的是转换后的一个十进制的数值。因为每一个位按照2^n转换之后相加得到的十进制必然可以反解,这样就可以知道这个值代表的是哪些样式了。

按位存储的话,应该是这样存的:

 

styleType supportType
1 5
2 7
3 1
... ...

 

 

 

 

 

 

实际应用

①场景一,在app环境中,过滤样式,即只把支持app的样式过滤出来显示。

应用原理:数值相与,只有1与1结果为1。

也就是说,我们如果要过滤出支持app的样式,也就是过滤styleType中第一位为1时对应的样式,即1**,也就是十进制数值中包含4这个数的。

js中,十进制数可以直接相与,所以遍历过滤时代码可以直接这样判断:

 

(item.supportType & 4 == 4)?'对应的styleType支持':'对应的styleType不支持'    //注意,==优先级比&大,所以要加括号

 

②场景二,修改supportType

因为保存到数据库中的是一个十进制的数组,所以才修改对应关系的时候,必须知道改的是哪个位置,并改变相应位置上的值,类二进制表示就是0变为1或1变为0的过程,但是改变十进制的数组则是改变对应的位的2^n的增加减少过程。

如:

 

    var supportType = { //按位编码,预留3位
        'app':4,
        'pc':2,
        'mini':1
    }
  var supportVal = 0;
  i f(obj.supportmini == 1){ //支持小程序
     supportVal= supportVal+supportType .mini;
   } 
  if(obj.supportPc == 1){ //支持pc
     supportVal= supportVal+ supportType .pc;
  } 
  obj.supportVal= supportVal;

 

最后,把对应的十进制存到数据库中即可。

更多场景参考这里。  

  

 

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

9

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

12

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

3

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

20

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

18

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

19

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

3

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MongoDB 教程
MongoDB 教程

共17课时 | 2.4万人学习

XML教程
XML教程

共142课时 | 6万人学习

php-src源码分析探索
php-src源码分析探索

共6课时 | 0.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号