php+mysql位与(|), 位或(&)存储运算

定义几个常量(常量值设为16进制码,16进制码表示有64位二进制码,这样我们就可有64种不同的变化)
const FLAG_A = 0x01;
const FLAG_B = 0x02;
const FLAG_C = 0x04;
const FLAG_D = 0x08;
.....
我们定义一个$flag变量,设置为0
$flag = 0;
用位与(|)运算存储,相当于(1+2+7+8)
$flag = $flag | FLAG_A; // 结果 1
$flag = $flag | FLAG_B; // 结果 3
$flag = $flag | FLAG_C; // 结果 7
$flag = $flag | FLAG_D; // 结果 15
把运算结果存入数据库
+------+
| flag |
+------+
|   15 |
+------+
接下来检查数据库中的值是否存在我们所设定的常量中。
取出数据库中flag = 15 的值与定义常量做位或(&)运算,两位同时为“1”,结果才为“1”,否则为0
if($flag & FLAG_D) { 
    echo true; 
} else { 
    echo false;
}
mysql存储与更新
位取反运算(~):将对应的二进制数逐位反转,即 1 取反后变 0 , 0 取反后变 1
$flag = 1; //标志位
$set = 1; //1设置,0取消

$nonFlag = ~((int)$flag); //取反后-2
if ($set) {
    //执行sql更新后,在二进制中该标志位变成1
    $sql = "UPDATE test SET `flag`=`flag`|$flag WHERE id=1";
} else {
    //取反运算,执行sql更新后,在二进制中该标志位变成0
    $sql = "UPDATE test SET `flag`=`flag`&$nonFlag WHERE id=1";
}

$db->query($sql);
这样在php代码中查询数据库做运算的时候,从运行结果来看,如果是1存在,否则0不存在。



您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: