7 回答
aluckdog
TA贡献1847条经验 获得超7个赞
不熟悉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
TA贡献1880条经验 获得超4个赞
其实你要就是一个数字的二进制表示
比如
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就是它的二进制数
开满天机
TA贡献1786条经验 获得超13个赞
15 的二进制是:1111
1 的二进制是:0001
2 的二进制是:0010
4 的二进制是:0100
8 的二进制是:1000
看懂了吗?或
运算就是把对应位置的1
组合到一起。
PIPIONE
TA贡献1829条经验 获得超9个赞
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秒到达战场
TA贡献1828条经验 获得超6个赞
def decrypt(n):
arr = []
i = 0
while n > 0:
x = n % 2
n >>= 1
if x == 1:
arr.append(i)
i += 1
return arr
- 7 回答
- 0 关注
- 619 浏览
添加回答
举报
0/150
提交
取消