zoukankan      html  css  js  c++  java
  • 利用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:kennyffly@gmail.com>}
     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

  • 相关阅读:
    天兔监控系统安装
    day6
    day5
    day4
    day3
    day2
    day1
    几个重要的Xenomai相关链接
    树莓派GPIO中断驱动程序
    转了一圈,再读LKD
  • 原文地址:https://www.cnblogs.com/kennyhr/p/3964024.html
Copyright © 2011-2022 走看看