举例,比如说下面可以组合成7

1|2|4; // 7

那么比如我给一个15,怎么拆分成:1、2、4、8,或者是任意其他数,怎么进行拆分

回答

不熟悉php。可以先确定这个数占多少位,比如64或者32等。然后再左移位,按位与来解决。写了个python的。xrange的意思是从64开始递减到0,每次递减1.

这里假定是64位,符号位就不考虑了。

dest_num = 11

for i in xrange(64, -1, -1):

n = 1 << i

r = n & dest_num

if r != 0:

print r

应该很容易改造成php的。

用移位来做应该会好一些,把有效位抽出来

其实你要就是一个数字的二进制表示

比如

15实际上是1111, 最右边1是12^0=1, 从右向左第二个是12^1=2, 第三个是12^2=4, 第四个是12^3=8

22用二进制是10110, 02^0+12^1+12^2+02^3+1*2^4 = 0+2+4+0+16 = 22

整数到二进制的做法是用除二法

22/2 = 11 ….. 0

11/2 = 5 ….. 1

5/2 = 2 ….. 1

2/2 = 1 ….. 0

1/2 = 0 ….. 1

一直除到为0, 余数10110就是它的二进制数

可以使用decbin方法 参考手册

首先得出二进制数,然后字符串操作依次读取

如 decbin(7) => 111

从右开始算,依次得出:

第一位可以得出2^(1-1)=1

第二位可以得出2^(2-1)=2

第三位可以得出2^(3-1)=4

同理:

decbin(15) => 1111 => 1|2|4|8

decbin(13) => 1101 => 1|4|8

15 的二进制是:1111

1 的二进制是:0001

2 的二进制是:0010

4 的二进制是:0100

8 的二进制是:1000

看懂了吗?

或运算就是把对应位置的1组合到一起。

Javascript版的算法:

function split(n) {

n = n|0; // 将浮点数n转化为正整数

let pad = 0;

const arr = []; // 用于保存结果的数组

while(n) {

if (n&1) arr.push(1<

pad++;

n >>= 1;

}

return arr;

}

对应的 PHP 版本:

function split($n) {

$n |= 0;

$pad = 0;

$arr = array();

while ($n) {

if ($n & 1) array_push($arr, 1 << $pad);

$pad++;

$n >>= 1;

}

return $arr;

}

def decrypt(n):

arr = []

i = 0

while n > 0:

x = n % 2

n >>= 1

if x == 1:

arr.append(i)

i += 1

return arr

php把1拆分成三份,【php】位运算如何拆分相关推荐

  1. php把1拆分成三份,谁知道Excel电子表格怎么把一个单元格分3份(分成3个三角)! | excle表格怎么分割三份...

    请问,excel表格的单元格怎么一分为二或一分为三,是拆分,与合并无关,请高手指教 excel拆分已合并的格的步骤: 三行单元格目前处于一个单元格状态. 选还原的单元格,右键鼠标,在工具栏中选择快捷转 ...

  2. pdf怎么拆分成几个部分?怎么拆分pdf中的一部分?

    我们经常会遇到PDF文档里面页面比较多,但是有时候我们只需要其中的一部分内容,该怎么办呢,这个时候就需要把这个PDF文件拆分成多个pdf文件了,或者按页面,或者只需要其中一两页,今天我就给大家分享一个 ...

  3. python拆分excel的sheet为单文件_WPS 2019 多个sheet表拆分成独立的excel文件

    参考: 场景:将多个sheet表拆分成独立的excel文件 一.安装VB工具: 默认情况下:wps -- 开发工具 --- VB 编辑器是灰选状态(即不可用状态),此时需要先安装vb工具:VBA Fo ...

  4. 表格拆分的两种方式 拆分成多个excel工作表或多个excel文件

    表格拆分的两种方式 拆分成多个excel工作表或多个excel文件 拆分Excel,可以分为3种层次:拆分excel单元格:拆分成多个excel工作表:拆分成多个excel文件 其中,第1种拆分是无法 ...

  5. 拆分pdf文件最简单的方法?PDF拆分成多个文件工具推荐

    很多朋友会在日常生活工作中遇见PDF文件过大的情况,这时候就有两个办法解决文件过大的办法,一个是压缩PDF,但是这种方法会影响到文件内容的清晰度,这就会劝退一部分用户,选择另一种方法,拆分PDF.那么 ...

  6. 将工作表按条件拆分成多个工作表或者工作簿,包含快速拆分与精致拆分

    将一个工作表按条件拆分成多个工作表或者拆分成工作簿,包含快速拆分与精致拆分. 精致拆分可以保留所有格式,速度慢一点. 可以将一个工作表拆分成多个工作表,也可以直接拆分成多个独立文件. 将工作表按条件拆 ...

  7. Python实现将列表按比例和数量拆分成子列表

    Python代码:将列表按比例和数量拆分成子列表 本文介绍了如何使用Python实现将列表按照指定比例和数量拆分成子列表的功能,并提供了相应的示例. 功能介绍 有时候我们需要将一个列表按照指定的比例和 ...

  8. java 位运算符在实际开发中的用处_java 位运算 和实际应用

    public class Test { public static void main(String[] args) { // 1.左移( < // 0000 0000 0000 0000 00 ...

  9. python中不同进制的整数之间可以直接运算_python学习第三天总结(进制与位运算,)...

    进制 计算机在存储数字的时候都是以二进制的形式去存的 十进制.十六进制.八进制.二进制 1.十进制 基数:0,1,2,3,4,5,6,7,8,9 进位:逢10进1 每一位的值: 111 = 1 * 1 ...

最新文章

  1. Sentinel 高可用流量管理框架
  2. Java反射(自己的理解)
  3. ISAIR2022征稿【中国・上海​, 2022年10月21-23日】
  4. Nature综述:古菌的多样性、生态功能和进化史
  5. python使用matplotlib可视化subplots子图、为subplots添加主标题(main title)、为subplots的每一个子图添加子图标题(subplots title)
  6. 一年一度程序员“补课”季来袭,618 背后技术大公开!
  7. 记mac电脑下pycharm配置qt-creator开发环境
  8. 操作系统(二十六)读者写者问题
  9. 获得邮件列表失败_新手在批发交易中会失败的5个领域
  10. RedisManager使用手册(二) -- 配置文件详解
  11. mybatis学习(37):动态sql-trim
  12. 2.2 基本算法之递归和自调用函数 8758 2的幂次方表示 python
  13. 【转载】大规模网站架构实战之体系结构
  14. MySQL的ibdata1文件占用过大
  15. Android AndroidNSSP的简单说明
  16. js ajax 表单异步提交
  17. opencv 模式识别学习
  18. cif t t操作流程图_外贸跟单员的详细工作流程:跟单员工作流程图
  19. 你们想要的这本硬件书!终于来了!(内含赠书福利)
  20. 防微信聊天气泡图片实现

热门文章

  1. [渝粤教育] 苏州工艺美术职业技术学院 手机人像摄影 参考 资料
  2. 【渝粤教育】电大中专电商运营实操 (18)作业 题库
  3. zigbee是什么,为什么说它最适合智能家居设备
  4. php vimrc配置文件,vim技巧:我的 .vimrc 配置文件,详解每一个配置项的作用
  5. java电影票选座_jQuery实现电影票选座效果手机端代码
  6. python学生管理系统类图_类图 python
  7. 【MFC系列-第15天】关联变量的概念与用法
  8. db platform mysql_数据库移植: 从Oracle移植到MySQL 注意databasePlatform | 学步园
  9. python开发的系统有哪些_Python web开发=几个模板系统的性能对比
  10. url override and HttpSession implements session