RT!$v=time();
$para=(int)5566778899;
$v=$v^$para;
echo "time: ".$v."<br>";
描述:我是想获得距格林尼子时间的秒数,然后和一个数(eg:5566778899)异或位运算。但是返回的是一个负数,看网上的资料都是和ip地址挂钩的。如果要实现我的这个功能,应该怎么做呀??不胜感激!

解决方案 »

  1.   

    $v=$v^$para ^ -1;
      

  2.   

    $para=(int)5566778899;
    echo $para;  看看还是多少呢?算法没问题,但可能已越界图方便你就试试gmp_系函数
      

  3.   

    $v=(int)1338534056;
    //$para=(int)6814186432;
    $para=(int)5566778899;
    echo "para : ".$para."<br>";
    echo "time : ".$v."<br>";输出为:para : 1271811603
    time : 1338534056$v=(int)1338534056;
    $para=(int)6814186432;
    //$para=(int)5566778899;
    echo "para : ".$para."<br>";
    echo "time : ".$v."<br>";
    $v=$v^$para^-1;
    echo "v^para^-1 : ".$v."<br>";输出为:
    para : -1775748160
    time : 1338534056
    v^para^-1 : 639610007当我的para参数为6814186432时,echo的是一个负数,应该就是溢出了,怎么解决?
      

  4.   

    $v=gmp_init(1338534056);
    $para=gmp_init(6814186432);
    echo "para : ".gmp_strval($para,10) ."<br>";
    echo "time : ".gmp_strval($v,10)."<br>";
    echo gmp_strval(gmp_xor($v,$para),10);
    输出结果:
    para : 0
    time : 1338534056
    gmp_xor : 1338534056
    还是对我在程序中用的para=6814186432 不正确啊
      

  5.   

    嗯,我已经固定$v 和$para,但是结果还是不正确啊,结果参见LS、LSS
      

  6.   

    才 10 位数字,长整形怎么会溢出呢
    php 的整形数都是有符号的长整形$v =    1338534056;
    $para = 6814186432;
    //$para = 5566778899;echo "para : ".$para."<br>";
    echo "time : ".$v."<br>";
    $v = $v ^ $para;
    echo "v^para : $v<br>";
    if($v < 0)
      echo "v^para^-1 : ".($v ^ -1)."<br>";
      

  7.   

    其实再 异或 1 是不对的,因为相当于求反负号表示最高位被置 1 了,但依然是正确的
    你可以 decbin 化成二进制表示看一下
      

  8.   

    我按照你的代码去测试,运行出来结果为:
    v^para : -639610008
    v^para^-1 : 639610007
    这个结果和我用C运行出来的结果:3655357288。不一样。
    我想要的是C运行出来的结果用PHP实现
      

  9.   

    echo decbin(3655357288);
    echo decbin(-639610008);分别为
    11011001111000000101001101101000
    11011001111000000101001101101000没看出有什么区别
    前面已经说了,php
    只有 signed long
    没有 unsigned long
      

  10.   

    这样子看,是一样的,一个二进制在PHP中,有两种结果,我只想要的是3655357288,怎么从-639610008转化到3655357288
      

  11.   

    c++中,我是懂。
    但是我不知道PHP的语法知识,是边写程序边看书边请教您的,自然会存在一些问题。
    如果您能够帮组我解决这个问题,我很是感激您呀
    对于在PHP中,一个一样的二进制能表达两个数,我很是奇怪呀!因为我想得到的3655357288这个数,将要在接下来的程序中去运用,所以我只能用表面的值,虽然3655357288和-639610008在二进制表示上是一样的
      

  12.   

    很是感激您能在儿童节的节日中抽出时间帮组我解答我的疑问,我的问题已经解决了,虽然不是太理解,有时间在去搞清楚怎么回事。
    $v=time();
    $para=6814186432;
    echo "para : ".$para ."<br>";
    echo "time : ".$v."<br>";
    $v=$v^$para;
    echo "v^para".$v."<br>";
    $v=bindec(decbin($v))."<br>";
    echo "v: ".$v."<br>";
      

  13.   

    这样
    echo sprintf("%u",-639610008);   
      

  14.   

    很是感激您能在儿童节的节日中抽出时间帮组我解答我的疑问,我的问题已经解决了,虽然不是太理解,有时间在去搞清楚怎么回事。
    $v=time();
    $para=6814186432;
    echo "para : ".$para ."<br>";
    echo "time : ".$v."<br>";
    $v=$v^$para;
    echo "v^para".$v."<br>";
    $v=bindec(decbin($v))."<br>";
    echo "v: ".$v."<br>";
      

  15.   

    童鞋,64位的操作了解一下BC Math 相关的函数吧。会帮到你的