利用php数组实现Bitset位处理模块功能

接上篇,php的bitset模块介绍和安装

利用php的bitset模块可以实现c++的bitset相关功能。但是,在生产环境下需要给线上服务器安装模块是很危险和麻烦的事,所以需要另辟蹊径。

我用php的array数组模拟了bitset的几个主要方法的实现过程,其实就是利用Array的key模拟内存地址,value模地址内容。php的Array还是超级方便的 :)

 1 <?php
 2 define(‘CHAR_BIT‘, 8);
 3 /**
 4  * bitset操作php实现
 5  * @version:1.0
 6  * @author:Kenny{Kenny.F<mailto:[email protected]>}
 7  * @since:2014/05/21
 8  */
 9 class Bitset {
10
11     private $bitset_data = array();
12     private $_len = 0;
13
14     //分配位数组空间
15     function &bitset_empty($bit=0)
16     {
17         if(!is_numeric($bit) || $bit<0)
18         {
19             echo "argument must be a positive integer";
20             return False;
21         }
22         $this->_len = $bit;
23         return $this->bitset_data;
24     }
25
26     //位数组位置$bit上的值置为1
27     public function bitset_incl(&$bitset_data=array(), $bit=0)
28     {
29         if (!is_numeric($bit) || $bit<0)
30         {
31             echo "Second argument must be a positive integer";
32             return False;
33         }
34
35         $bitset_temp = isset($bitset_data[intval($bit/CHAR_BIT)]) ? $bitset_data[intval($bit/CHAR_BIT)] : 0;
36         $bitset_data[intval($bit/CHAR_BIT)]  = $bitset_temp | 1 << ($bit % CHAR_BIT);
37
38         unset($bitset_data);
39     }
40
41     //判断某个位置bit上的值是否为1
42     public function bitset_in($bitset_data=array(), $bit=0)
43     {
44         if (!is_array($bitset_data))
45         {
46             echo "first argument is not a array";
47             return False;
48         }
49
50         if ($bit < 0)
51         {
52             return False;
53         }
54         if ($this->_len == 0)
55         {
56             return False;
57         } elseif($bit >= $this->_len*CHAR_BIT){
58             return False;
59         } elseif ($bitset_data[intval($bit/CHAR_BIT)] & (1 << ($bit % CHAR_BIT))){
60             return True;
61         } else{
62             return False;
63         }
64     }
65
66 }

你可以查看我的github

时间: 2024-10-10 10:06:05

利用php数组实现Bitset位处理模块功能的相关文章

利用OllyDebug查看程序调用的dll模块

最近在做一个Qt项目,在产品发布的时候一直为找不到程序到底缺少了哪些dll组件而困扰.具体问题是,在我的项目中使用到了QMediaPlayer播放一段音频文件,我使用的开发环境的Win7 32位,而在发布安装包的时候,还是照常去掉Qt相关的环境变量,然后运行可执行程序,提示缺少什么dll,我就向可执行程序的目录下拷贝对应的dll,直到程序可以正常启动运行.就是按照上面的方法,我制作了软件的安装包,但是,当将这个软件安装到XP系统上测试时,发现程序没有声音了,这个问题让我很纠结. 后来,我在网上找

Jquery利用JSON数组创建表格

$(function () { var json = [ { "name": "张三", "age": "20", "gender": "男" }, { "name": "李四", "age": "21", "gender": "女" }, { "name&q

如何利用启明星Portal门户系统的Page模块构建文档库

利用启明星门户系统的Page模块构架可以搭建企业内部的文档管理系统. (一)应用背景 企业内部通常都会使用共享网盘的方式来存放不同部门之间的文档,例如管理员在服务器上对人事部门增加人事部文档文件夹. 但是随着文件的增加,管理会越来越不方便,主要体现在 (1)查找不方便.用户可能为了找一个制度文档翻遍所有文件夹. (2)公私不明权限维护不方便,例如在人事部文档内部,部分制度需要公开,部分仅限人事部内部查看,而现行管理方式中所有内容都混在了一起,杂乱无章. 为此,启明星推出了Pages模块的文档管理

利用后缀数组构造后缀树

由于蒟蒻azui前段时间忙着准备省选,并在省选中闷声滚大粗,博客停更了好久.. 省选过后整个人各种颓,整天玩玩泥巴什么的... 前段时间学后缀数组的时候上网查相关资料,看到说后缀数组和后缀树是可以相互转化的,并且uoj上有大量通过后缀自动机建出后缀树然后dfs遍历获得后缀数组的模板,但是通过后缀数组来建后缀树的资料确实稀缺. 也许大牛们都觉得这xjbYY一下就可以写了,所以网上没找到对应的代码,那么我来补个坑吧.大牛勿喷.. 先谈谈我的理解吧.. 讲道理后缀数组和后缀树应该是完全等价的,但前两者

利用Code::Blocks搭建64位C++开发平台

0.前言 随着64位计算机的普及,编写64位程序成为程序员基本的要求.我在<体验Code::Blocks下的C++编程>中描述了利用Code::Blocks官方提供的封装了编译器的安装包(codeblocks-17.12mingw-setup.exe)搭建开发环境编写C++程序的方法.但是,官方提供的安装包中的编译器是32位的,只能用于开发32位程序.如果你想开发64位的程序,就必须自己安装另外的编译器,而不是使用原来在安装包里的. 下面,我就介绍一下利用Code::Blocks搭建64位C+

C# 根据文件流byte[]数组前两位 判断文件类型 附 文件扩展名说明

判断文件真实的类型,不是通过扩展名来判断:而是通过byte[]数组前两位编码来判断, 原文连接 https://www.cnblogs.com/Percy_Lee/p/4980451.html /// <summary> /// 判断文件格式 /// http://www.cnblogs.com/babycool /// </summary> /// <param name="filePath"></param> /// <retu

Winform开发框架中的内容及文档管理模块功能介绍

在开发项目的时候,我们有一些场景需要编辑一些HTML文档,作为内容发布系统的一部分,有时候也需要对一些文档如WORD文档进行编辑管理,这样需要我们对这些内容及文档进行合适的管理.本文主要介绍在WInform项目中利用ZetaHtmlEditControl进行HTML内容管理,以及利用TX TextControl控件进行WORD文档管理,这两方面都是我们一般进行内容和文档管理所必须的. 1.内容及文档管理模块功能介绍 整个模块,支持WInform框架和混合式开发框架两种模式,都是基于WInform

基于Metronic的Bootstrap开发框架--工作流模块功能介绍

在很早之前的随笔里面,已经介绍了WInform框架中工作流模块的功能,不过由于工作流模块中界面处理部分比较麻烦,一直没有在Bootstrap框架中进行集成,最近由于项目的关系,花了不少精力,把工作流模块重新梳理迁移到Bootstrap框架上,本篇随笔主要介绍基于Metronic的Bootstrap开发框架的工作模块功能. 1.工作流的设计模型 在我们开始介绍工作流模块功能之前,我们需要了解下工作流模块的设计模型,以便我们更好深入了解各个部分的功能. 我们知道,我们在Office里面创建任何文档,

编程题:指向二维数组元素的指针变量。功能:已知二维数组a[2][3],输入输出全部元素。

#include<stdio.h> void main() { int a[2][3],i,j; int *p; /*用坐标法输入二维数组元素*/ for(i=0;i<2;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); /*用指针法输出二维数组元素*/ p=a[0];         /*等价于p&a[0][0];*/ for(;p<a[0]+6;p++)   printf("%4d&quo