[英]how convert float to 64bit binary or 32bit float to 64bit int - php
[英]Calculate bitwise 64bit operations on 32bit system with PHP
我有一系列存储在数据库中的二进制数的基本10表示。 例如:
686316060672
现在我已经编写了一些简单的代码来从中提取位:
$code = 686316060672;
for($n = 0; $n < 64; $n++)
{
$r = pow(2,$n);
if(($code & $r) > 0)
{
printf('n=%d'."\n", $n);
}
}
现在我知道这个二进制数大于32位,因此我得不到我期望的结果。
上面的代码给了我:
n=21 n=23 n=24 n=25 n=27 n=30
当我知道答案应该是:
n=21 n=23 n=24 n=25 n=27 n=30 n=31 n=32 n=33 n=34 n=35 n=36 n=39
它似乎是一个32位操作系统问题,但我似乎无法弄清楚如何将$code
值分成两个32位段。
这是我试过的:
$number = base_convert($code, 10, 2);
$lsb = bindec(substr($number, -32));
$msb = bindec(substr_replace($number, '', -33));
然后我用$lsb
和$msb
替换$code
有人能指出我正确的方向,以便我可以获得n的所有值。
所以在调查了一下之后......我正在以错误的方式看问题。 下面是我如何解决问题。
$x = 686316060672;
$y = 2;
for($n = 1; $n < 65; $n++){
$x = floor($x / $y);
if($x % 2){
printf('n=%d'."\n", $n);
}// end if
}// end for
这给了:
n=21 n=23 n=24 n=25 n=27 n=30 n=31 n=32 n=33 n=34 n=35 n=36 n=39
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.