[PHP] 按位与& 或| 异或^ 的日常使用
按位与:
0&0=0; 0&1=0; 1&0=0; 1&1=1;
按位或:
0|0=0; 0|1=1; 1|0=1; 1|1=1;
按位异或,在或的基础上1 1也为0:
0^0=0; 0^1=1; 1^0=1; 1^1=0;
1.一个int型字段,存储十进制的数字,比如说是5
那么该数字转成二进制是101,我自己定义从左往右数,
第一位1,代表某功能自动转发开启
第二位0,代表自动删除关闭
第三位1,代表自动保存开启
2.判断第三位是否开启自动保存的代码
($userStatus & pow(2,3-1))!=0
3.pow是指数表达式函数,2的2次方,转成二进制是0100,按位与0101 & 0100 是0100 十进制为4,因此不等于0为true
4.设置某一位的值,如果要设置为1代码是
$userStatus | pow(2,3-1)
原始值为 0001,要设置第三位为1,0001 | 0100 为0101
5.把某一位设置为0,代码是
$userStatus ^ pow(2,3-1) 0101 ^ 0100 为0001
function setStatus($source,$flag,$value){
if (intval($value) == 1 || strcasecmp($value, 'on') == 0) {
$value = 1;
} else {
$value = 0;
} $status = pow(2, $flag - 1);
$oldStat = (($source & $status) != 0);
if ($oldStat == $value) {
return $source;
}
if ($value) {
$source |= $status;
} else {
$source ^= $status;
}
return $source;
}
//001 转成 101
var_dump(setStatus(1,3,'on'));//int(5)
//1101 转成 0101
var_dump(setStatus(13,4,0));//int(5)
[PHP] 按位与& 或| 异或^ 的日常使用的更多相关文章
- Python入门指南(超详细)
Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技.本文主要针对的读者是: 毫无 ...
- Python 简单入门指北(一)
Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫.但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑 ...
- JS 学习笔记--4---运算符
1.JS 中包含的运算符有:一元运算符.二元运算符.三元运算符.算术运算符.关系运算符.逻辑运算符.位运算符.赋值运算符.其他的运算符等. 2.表达式:简单来讲就是一句代码(分号隔开),解释器会把它翻 ...
- Swift 基本基本运算符
Swift 1,赋值运算符 Swift赋值表达式是没有值的,不支持连续赋值. 2,算术运算符 除数可为0 var f=1/0.0 求余的结果的正负取决于被除数 3,溢出运算符* 根据二进制来进行计算 ...
- hdu_5589_Tree(莫队+字典树)
题目连接:hdu_5589_Tree 题意:给你一棵树和一些边值,n个点n-1条边,一个m,q个询问,每个询问让你输出在[l,r]区间内任意两点树上的路径的边权异或的和大于m的点对数. 题解:这题很巧 ...
- C语言高效位操作
思考: 1. 如何将一个数据中的多个不连续位清位? 1. 如何将一个数据中的多个不连续位置位? 1. 如何反转一个数据中的多个不连续位(1->0, 0->1)? 基础知识:C 语言位操作 ...
- Java - day002 - 运算符,位运算,流程控制
1 运算符 +-*/ (+) 既是数学运算 ,也是 字符串链接 % 求余 / 求模 (进口大麻袋) == ...
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- C陷阱与缺陷读书笔记
2.1理解函数声明 这一章仔细分析了(*(void(*)())0)();这条语句的含义,并且提到了typedef的一种函数指针类型定义的用法. 我们经常用到的typedef用法是用于指定结构体的类型, ...
随机推荐
- [LeetCode] Magic Squares In Grid 网格中的神奇正方形
A 3 x 3 magic square is a 3 x 3 grid filled with distinct numbers from 1 to 9 such that each row, co ...
- cadence钻孔文件及光绘文件的生成
完成PCB布线之后,需要生成钻孔文件和光绘文件交给PCB厂家制作PCB板,下面总结详细方法!
- 微信小程序开发工具中快捷键
微信小程序开发工具表面上是没有更多的样式类的工具,例如缩进.隐藏代码什么的. 现在总结一下小程序开发工具常用的一些快捷键: 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ct ...
- git mvn 使用
git 更换远程仓库地址: stps:先删除远程仓库地址,然后再添加 [git remote rm origin] 删除现有远程仓库 [git remote add origin url]添加新远程仓 ...
- python从入门到实践-9章类
#!/user/bin/env python# -*- coding:utf-8 -*- # 类名采用的是驼峰命名法,即将类名中每个单词的首字母大写,而不使用下划线.# 对于每个类,都应紧跟在类定义后 ...
- 简单工厂模式demo
1. 简单工厂模式 domain的接口 public interface Color{ public void display(); } red public Class Red implements ...
- SQL 查询当前时间
Mysql: select date_format(now(),'%Y-%m-%d'); Oracle: Oracle中如何获取系统当前时间进行语句的筛选是SQL语句的常见功能 获取系统当前时间dat ...
- 微信小程序 open-data更改样式 open-data 显示头像 圆形
废话不多说,直接看效果: 效果一: 代码如下: <view class='zhubo'> <view class='zhuboLeft'> <view class='zh ...
- 1 小时 SQL 极速入门(一)
前几天,我在论坛溜达.看到一个人发帖说 做了6年的企业级开发,总是被互联网行业的人认为没技术含量,不就是CRUD么 先解释下 CRUD 是什么.CRUD 就是我们常说的增删改查(Create,Retr ...
- [Swift]LeetCode281. 之字形迭代器 $ Zigzag Iterator
Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ...