位运算如何拆分

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

1|2|4;    // 7

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

繁星coding
浏览 620回答 7
7回答

aluckdog

不熟悉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的。

神不在的星期二

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

慕村225694

其实你要就是一个数字的二进制表示比如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 ..... 011/2 = 5 ..... 15/2 = 2 ..... 12/2 = 1 ..... 01/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|8decbin(13) => 1101 => 1|4|8

开满天机

15 的二进制是:11111 的二进制是:00012 的二进制是:00104 的二进制是:01008 的二进制是:1000 看懂了吗?或运算就是把对应位置的1组合到一起。

PIPIONE

Javascript版的算法: function split(n) { n = n|0; // 将浮点数n转化为正整数 let pad = 0; const arr = []; // 用于保存结果的数组 while(n) { if (n&1) arr.push(1<<pad); 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; }

30秒到达战场

def decrypt(n): arr = [] i = 0 while n > 0: x = n % 2 n >>= 1 if x == 1: arr.append(i) i += 1 return arr
打开App,查看更多内容
随时随地看视频慕课网APP